Per rispondere alle domande specifiche di Tyilo:
analogRead(5)e digitalRead(5)leggerà da due posti diversi. Il primo sarà letto dal canale analogico 5o A5e quest'ultimo leggere da perno 5 che succede ad essere un pin digitale. Quindi sì, se vuoi leggere un pin analogico con digitalReadte dovresti usare A5.
Perché?
analogReadrichiede 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 analogReadil 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, analogReadconvertiresti il numero di pin A0nel suo numero di canale corretto 0.
Se vuoi usare digitalWriteil primo pin analogico A0puoi solo fare digitalWrite(A0, x). digitalWritenon 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 digitalReade 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.cVedrai 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?