Aby odpowiedzieć na szczegółowe pytania Tyilo:
analogRead(5)i digitalRead(5)będzie czytać z dwóch różnych miejsc. Pierwszy odczyta z kanału analogowego 5lub A5drugi odczyta z pinu 5, który okazuje się być pinem cyfrowym. Tak, jeśli chcesz czytać analogowy pin digitalRead, powinieneś go używać A5.
Dlaczego?
analogReadwymaga numeru kanału wewnętrznie, ale pozwoli ci również nadać mu numer PIN. Jeśli nadasz mu numer pinu, przekształci go w odpowiedni numer kanału. O ile wiem, analogReadjedyna funkcja, która korzysta z numeru kanału wewnętrznie, jest jedyną, która pozwala na numer kanału i jest jedyną funkcją z tą nieudokumentowaną konwersją pin-to-channel. Aby to zrozumieć, zacznijmy od kilku przykładów.
Jeśli chcesz użyć analogReadpierwszego pinu analogowego A0, możesz zrobić, analogRead(0)który używa numeru kanału lub analogRead(A0)który używa numeru pinu. Jeśli użyjesz wariantu numeru pinu, analogReadprzekonwertujesz numer pinu A0na właściwy numer kanału 0.
Jeśli chcesz użyć digitalWritepierwszego analogowego pinu, A0możesz to zrobić tylkodigitalWrite(A0, x) . digitalWritenie korzysta z kanałów analogowych wewnętrznie i nie pozwala przekazać numeru kanału. Cóż, to niech cię ale ty wybrałeś niewłaściwy kod PIN. To samo dotyczy, digitalReada nawet analogWrite.
Co z konwersjami pin-to-channel wykonanymi przez analogRead? Źródło tej funkcji można znaleźć w hardware/arduino/avr/cores/arduino/wiring_analog.c: Zobaczysz, że wykonuje ona proste odejmowanie w zależności od typu płytki. Plik A0/ A1/ A2/ itp. Stałe reprezentują liczbę pinów kanałów analogowych i mogą być używane wszędzie tam, gdzie potrzebujesz odwoływać się do wejść analogowych. Z tego powodu są najlepszą opcją do użycia w kodzie Arduino, ponieważ jest oczywiste, że używasz tego samego portu fizycznego, nawet jeśli używasz różnych funkcji. Definicje tych stałych zależą od twojej planszy.
Na przykład, oto kod definicji pinów analogowych dla Arduino Uno w 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;
Dla porównania tutaj jest analogowy kod definicji pin dla 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;
Dalsza dyskusja EE na temat pinów analogowych: Czy mogę używać analogowych pinów na Arduino dla mojego projektu jako cyfrowego?