Um Tyilos spezifische Fragen zu beantworten:
analogRead(5)und digitalRead(5)wird von zwei verschiedenen Orten lesen. Ersteres liest vom analogen Kanal 5oder A5Letzteres von Pin 5, der zufällig ein digitaler Pin ist. Also ja, wenn du einen analogen Pin mit lesen digitalReadwillst solltest du verwenden A5.
Warum?
analogReaderfordert eine interne Kanalnummer, aber Sie können auch eine PIN-Nummer vergeben. Wenn Sie eine PIN-Nummer vergeben, wird diese in die entsprechende Kanalnummer umgewandelt. Soweit ich weiß, analogReadist dies die einzige Funktion, die intern eine Kanalnummer verwendet, die einzige, die eine Kanalnummer zulässt, und die einzige Funktion bei dieser undokumentierten Pin-zu-Kanal-Konvertierung. Um dies zu verstehen, beginnen wir mit einigen Beispielen.
Wenn Sie analogReadden ersten analogen Pin verwenden möchten, A0können Sie festlegen, analogRead(0)welcher die Kanalnummer oder analogRead(A0)welcher die Pin-Nummer verwendet. Wenn Sie die Pin-Nummer-Variante verwenden analogReadwürden , würden Sie die Pin-Nummer A0in die richtige Kanalnummer umwandeln 0.
Wenn Sie digitalWriteauf dem ersten analogen Stift verwenden möchten, A0können Sie nur tun digitalWrite(A0, x). digitalWriteverwendet keine analogen Kanäle intern und lässt Sie keine Kanalnummer übergeben. Nun, es wird Ihnen erlauben , aber Sie werden den falschen Stift auswählen. Gleiches gilt für digitalReadund gerade analogWrite.
Was ist mit den Pin-zu-Kanal-Konvertierungen von analogRead? Die Quelle für diese Funktion finden Sie unter hardware/arduino/avr/cores/arduino/wiring_analog.cSie werden sehen, dass sie eine einfache Subtraktion basierend auf dem Kartentyp ausführt. Die A0/ A1/ A2/ etc. Konstanten stellen die Pin-Nummer der analogen Kanäle dar und können überall dort verwendet werden, wo Sie auf die analogen Eingänge verweisen müssen. Aus diesem Grund sind sie die beste Option, um sie in Ihrem Arduino-Code zu verwenden, da es sehr offensichtlich ist, dass Sie denselben physischen Port verwenden, auch wenn Sie verschiedene Funktionen verwenden. Die Definitionen dieser Konstanten hängen von Ihrer Karte ab.
Hier ist zum Beispiel der analoge PIN-Definitionscode für den 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;
Zum Vergleich hier der analoge Pin-Definitionscode für den 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;
Weitere EE-Diskussion zu analogen Pins: Kann ich die analogen Pins auf dem Arduino für mein Projekt als digital verwenden?