Exemples autour de la résolution du convertisseur analogique numérique

Deux exemples pour illustrer la conversion analogique numérique CAN

La carte Uno ne permet pas de changer le résolution lors de la lecture d'une valeur "analogique" (ce que peuvent faire entre autre les modèles Zéro et Due en utilisant la fonction AnalogReadResolution(n))

L'astuce consiste à utiliser une fonction très pratique, la fonction map, qui va répartir automatiquement les valeurs de 0, à 1023 en 0 à 3

int valeursur2bits = map(sensorValue,0,1023,0,3);

conversion sur 10 bits (standard)

1
void setup() {
2
  // initialize serial communication at 9600 bits per second:
3
  Serial.begin(9600);
4
}
5
6
// the loop routine runs over and over again forever:
7
void loop() {
8
  // read the input on analog pin 0:
9
  int sensorValue = analogRead(A0);
10
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
11
  float voltage = sensorValue * (5.0 / 1023.0);
12
  // print out the value you read:
13
  Serial.print("mesure sur A0 :");
14
  Serial.println(sensorValue);
15
  Serial.println(voltage);
16
  delay(2000);
17
}

Conversion simulée sur 2 bits

1
2
void setup() {
3
  // initialize serial communication at 9600 bits per second:
4
  Serial.begin(9600);
5
}
6
7
8
void loop() {
9
10
  Serial.println(analogRead(A0));
11
  int sensorValue = analogRead(A0);
12
  //change the resolution to 2 bits and read A0
13
  
14
  int valeursur2bits = map(sensorValue,0,1023,0,3);
15
  float voltage = valeursur2bits  * (5.0 / 3.0);
16
  // print out the value you read:
17
  Serial.print("mesure sur A0 :");
18
  Serial.println(valeursur2bits);
19
  Serial.println(voltage);
20
  delay(2000);
21
}