Dans l' « Exemples → Analog → AnalogInput » je vois qu'ils ont écrit :
int sensorPin = A0;
il me semble que ( int A0 ) est égal à (int 10 ) : « int » étant un format numérique 16bit (de -32'768 à 32'767) et que « A » en exedécimal est égal à 10 !
Dois-je utiliser le format « int » pour déclarer le pin analogique ou un autre format (« byte » « char » « String » … ?
Ce que je n'arrive pas à comprendre, c'est que l'ont met une lettre dans une variable int . uint8_t = int de 8 bit non signé.
Donc pour reprendre l'exemple :
/*Analog Input
http://www.arduino.cc/en/Tutorial/AnalogInput
*/
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue);
}
La déclaration : [ int sensorPin = A0 ] est bien correcte. (Avec un « const » devant ce serais encore mieux)
Oui, avec un const ce serai encore mieux. Et avec un uint8_t à la place de int ce serait encore encore mieux puisque le numéro de pin sera inférieur à 256.
Expliqué grossièrement:
La valeur stockée dans la constante [sensor] n'est pas (A0) mais (14). La bibliothèque pins_arduino.h transforme A0 en chiffre correspondant à la pin du procésseur (14). Pas obligatoirement A0 = 14 selon la carte et le processeur sélectionné. Si j'ai un méga ce chiffre sera différant.
Merci d'avoir éclairé ma lanterne. Bonne journée
Edit:
Petit code que je viens de tester avec un Arduino Nano
Et pour terminer d'éclairer ta lanterne (au risque de l’obscurcir) 13 n'est pas un chiffre que le microcontrôleur comprend.
Il y a encore des choses cachées >:( .
Le numérotage Arduino est un numérotage de confort.
La vraie numérotation est celle du concepteur du micro : Atmel mais elle n'est pas pratique.
Comme dans tous les microcontroleurs les E/S sont groupées par PORT.
Par exemple dans le 328p des cartes UNO, nano, mini-pro il y a 3 PORTS de 8 bits soit 8 E/S possibles.
PORT B , PORT C et PORT D .
Les bits de ces ports peuvent ne pas être tous raccordés à une E/S : par exemple les bits 6 et 7 du PORT C sont utilisés pour connecter le quartz externe. Dans le port B un bit est utilisé pour gérer le Reset.
Dans les fichiers de l'IDE il y a des macros (petits programmes) pour convertir la dénomination Arduino en dénomination Atmel
La numérotation Arduino n'est qu'une convention, avec les programmes "cachés" qui vont avec pour que l'utilisateur n'ait à s'occuper de rien.
C'est pour cela qu'il n'y a rien d'étonnant à ce que A0 = 14 ==> c'est juste la convention arduino, bon ok ce n'est pas évident à le savoir.
Par contre cette numérotation 1...13 A0 A1 ..... induit régulièrement en erreur sur le nombre d'entrées/sorties digitales.
Le site Arduino en rajoute même : il n'y en a pas 13 E/S numériques mais 19 !
En effet A0 à A5 sont raccordés au PORTC (bit 0 à 5) et à l'entrée du multiplexeur analogique.
Au démarrage du micro elles sont des E/S numériques comme les autres.
Ce n'est que quand on fait appel à la fonction analoRead() qu'elles sont basculées sur leur fonction secondaire qui est l'entrée mesure analogique.
C'est pour cela que la double numérotation existe chez Wiring/Arduino :
1 à 13 puis A0 à A5
et :
1 à 19
Ce qui ne simplifie pas vraiment.