Pour répondre aux questions spécifiques de Tyilo:
analogRead(5)
et digitalRead(5)
lira à partir de deux endroits différents. Le premier lira à partir du canal analogique 5
ou A5
le second lira à partir de la broche 5 qui se trouve être une broche numérique. Alors oui, si vous voulez lire une broche analogique avec digitalRead
vous, vous devez utiliser A5
.
Pourquoi?
analogRead
nécessite un numéro de canal en interne, mais il vous permettra également de lui attribuer un code PIN. Si vous lui donnez un code PIN, il le convertira en son numéro de canal correspondant. Pour autant que je sache, analogRead
c'est la seule fonction qui utilise un numéro de canal en interne, est la seule à autoriser un numéro de canal, et est la seule fonction avec cette conversion pin-to-channel non documentée. Pour comprendre cela, commençons par quelques exemples.
Si vous souhaitez utiliser analogRead
sur la première broche analogique, A0
vous pouvez faire analogRead(0)
qui utilise le numéro de canal ou analogRead(A0)
qui utilise le numéro de broche. Si vous deviez utiliser la variante du numéro de broche, analogRead
convertirait le numéro de broche A0
en son numéro de canal approprié 0
.
Si vous souhaitez utiliser digitalWrite
sur la première broche analogique , A0
vous pouvez seulement faire digitalWrite(A0, x)
. digitalWrite
n'utilise pas de canaux analogiques en interne et ne vous permet pas de lui transmettre un numéro de canal. Eh bien, cela vous permettra, mais vous sélectionnerez la mauvaise épingle. La même chose s'applique à digitalRead
et même analogWrite
.
Qu'en est-il des conversions pin-to-channel effectuées par analogRead
? La source de cette fonction peut être trouvée dans hardware/arduino/avr/cores/arduino/wiring_analog.c
Vous verrez qu'elle effectue une soustraction simple basée sur le type de carte. Le A0
/ A1
/ A2
/ etc. les constantes représentent le numéro de broche des canaux analogiques et peuvent être utilisées partout où vous devez vous référer aux entrées analogiques. Pour cette raison, ils sont la meilleure option à utiliser dans votre code Arduino, car il est très évident que vous utilisez le même port physique même lorsque vous utilisez différentes fonctions. Les définitions de ces constantes dépendent de votre carte.
Par exemple, voici le code de définition de broche analogique pour l'Arduino Uno dans hardware/arduino/avr/variants/standard/pins_arduino.h
static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;
Pour comparaison, voici le code de définition des broches analogiques pour l'Arduino Mega:
static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;
Discussion EE supplémentaire sur les broches analogiques: Puis-je utiliser les broches analogiques de l'Arduino pour mon projet en tant que numérique?