[Résolu] Unité ? Déclaration pin Analogique

Bonjour,

Quelle unité pour déclarer un pin ANALOGIQUE ?

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 » … ?

Salutations, bonne journée

Bonjour,

A0 c'est un nom de variable (ou de constante) défini dans un .h
Pour de l'hexadécimal ça s'écrit 0xA0 en C/C++

dans pins_arduino.h on trouve

#define PIN_A0   (14)
static const uint8_t A0 = PIN_A0;

Je te remercie pour ta réponse,

Malheureusement, pour un débutant comme moi, c'est un peut du chinois. Désolé.

kamill:
A0 c'est un nom de variable (ou de constante) défini dans un .h

De ce que je comprend c'est que A0 renseigne sur la broche (14) du microcontrôleur depuis une bibliothèque « invisible » de l'utilisateur de l'IDE.

#define PIN_A0   (14)
static const uint8_t A0 = PIN_A0;

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.

:grinning: ça y est je crois que j'ai compris.

Si j'écris :

const uint8_t sensor= A0;

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

void setup() {
 Serial.begin(9600);
}

void loop() {
Serial.print("A0:");
Serial.print(A0);
Serial.print("   A1:");
Serial.println(A1);
delay(500);
}

Le moniteur série me retourne: A0:14 A1:15

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.