Чтобы ответить на конкретные вопросы Tyilo:
analogRead(5)и digitalRead(5)будет читать из двух разных мест. Бывший будет считывать с аналогового канала 5или A5и последний будет читать из пальца 5 , который происходит , чтобы быть цифровой контактный. Так что да, если вы хотите прочитать аналоговый пин-код, digitalReadвы должны использовать A5.
Почему?
analogReadтребуется внутренний номер канала, но это также позволит вам присвоить ему пин-код. Если вы дадите ему пин-код, он будет преобразован в соответствующий ему номер канала. Насколько я могу судить, analogReadединственная функция, которая использует номер канала внутри, единственная, которая разрешает номер канала, и единственная функция с этим недокументированным преобразованием pin-to-channel. Чтобы понять это, давайте начнем с нескольких примеров.
Если вы хотите использовать analogReadпервый аналоговый вывод, A0вы можете analogRead(0)использовать номер канала или analogRead(A0)номер контакта. Если бы вы использовали вариант с номером контакта, analogReadконвертировал бы номер контакта A0в его правильный номер канала 0.
Если вы хотите использовать digitalWriteна первом аналоговом выводе, A0вы можете только сделать digitalWrite(A0, x). digitalWriteне использует аналоговые каналы внутри и не позволяет передавать ему номер канала. Ну, это позволит вам, но вы выберете неправильный контакт. То же касается digitalReadи даже analogWrite.
А как насчет преобразований pin-to-channel analogRead? Источник этой функции можно найти в. hardware/arduino/avr/cores/arduino/wiring_analog.cВы увидите, что она выполняет простое вычитание в зависимости от типа платы. A0/ A1/ A2/ И т.д.. Константы представляют номер контакта аналоговых каналов и могут использоваться везде, где вам нужно обратиться к аналоговым входам. По этой причине они являются лучшим вариантом для использования в вашем коде Arduino, потому что совершенно очевидно, что вы используете один и тот же физический порт, даже если вы используете разные функции. Определения этих констант зависят от вашей доски.
Например, вот код определения аналогового вывода для Arduino Uno в 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;
Для сравнения вот код определения аналогового вывода для 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;
Дальнейшее обсуждение EE аналоговых выводов: Могу ли я использовать аналоговые выводы на Arduino для моего проекта в качестве цифрового?