Per rispondere alle domande specifiche di Tyilo:
analogRead(5)
e digitalRead(5)
leggerà da due posti diversi. Il primo sarà letto dal canale analogico 5
o A5
e quest'ultimo leggere da perno 5 che succede ad essere un pin digitale. Quindi sì, se vuoi leggere un pin analogico con digitalRead
te dovresti usare A5
.
Perché?
analogRead
richiede un numero di canale internamente ma ti permetterà di assegnargli anche un numero di pin. Se gli dai un numero di pin, lo convertirà nel numero di canale corrispondente. Per quanto ne so analogRead
è l'unica funzione che utilizza internamente un numero di canale, è l'unica a consentire un numero di canale ed è l'unica funzione con questa conversione da pin a canale non documentata. Per capirlo, iniziamo con alcuni esempi.
Se si desidera utilizzare analogRead
il primo pin analogico, A0
è possibile analogRead(0)
utilizzare quale numero di canale o analogRead(A0)
quale numero di pin. Se dovessi usare la variante del numero di pin, analogRead
convertiresti il numero di pin A0
nel suo numero di canale corretto 0
.
Se vuoi usare digitalWrite
il primo pin analogico A0
puoi solo fare digitalWrite(A0, x)
. digitalWrite
non utilizza i canali analogici internamente e non consente di passargli un numero di canale. Bene, ti permetterà ma selezionerai il pin sbagliato. Lo stesso vale per digitalRead
e persino analogWrite
.
Che dire delle conversioni pin-to-channel fatte da analogRead
? La fonte per quella funzione può essere trovata in hardware/arduino/avr/cores/arduino/wiring_analog.c
Vedrai che fa una semplice sottrazione in base al tipo di scheda. Il A0
/ A1
/ A2
/ ecc. le costanti rappresentano il numero di pin dei canali analogici e possono essere utilizzate ovunque sia necessario fare riferimento agli ingressi analogici. Per questo motivo sono l'opzione migliore da usare nel tuo codice Arduino perché è ovvio che stai usando la stessa porta fisica anche quando stai usando funzioni diverse. Le definizioni di tali costanti dipendono dalla tua scheda.
Ad esempio, ecco il codice di definizione pin analogico per Arduino Uno in 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;
Per comparaison ecco il codice di definizione pin analogico per 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;
Ulteriore discussione EE sui pin analogici: posso usare i pin analogici su Arduino per il mio progetto come digitale?