почему переменные Arduino типа int могут содержать такое значение как A2

Почему верно следующее утверждение:

int inputPin = A2;

Я думал, что int переменные могут содержать только целые числа. Является ли A просто представлением числа?

Спасибо за любую помощь

, 👍0

Обсуждение

Обычно я бы проголосовал за то, чтобы закрыть это, так как это довольно просто и действительно связано с языком, и есть бесконечное множество этих вопросов. Но я видел, как *этот* вопрос возникал бесчисленное количество раз в беседах с новыми пользователями Arduino почти *точно* в такой форме, часто вместо этого приводя "A0". Итак, я голосую за то, чтобы оставить его открытым., @timemage

Вероятно, было бы лучше написать "следующее утверждение является **действительным**" или что-то в этом роде, в отличие от "истинно"., @timemage


2 ответа


2

Вы правы. A2 - это просто число (как и все в микроконтроллере). Мы можем посмотреть соответствующую часть в pins_arduino.h (файл, определенный в папке вариантов вашего используемого ядра и используемой платы, для меня: ~/arduino-1.8.9/hardware/arduino/avr/variations/standard/pins_arduino.h):

#define PIN_A0   (14)
#define PIN_A1   (15)
#define PIN_A2   (16)
#define PIN_A3   (17)
#define PIN_A4   (18)
#define PIN_A5   (19)
#define PIN_A6   (20)
#define PIN_A7   (21)

static const uint8_t A0 = PIN_A0;
static const uint8_t A1 = PIN_A1;
static const uint8_t A2 = PIN_A2;
static const uint8_t A3 = PIN_A3;
static const uint8_t A4 = PIN_A4;
static const uint8_t A5 = PIN_A5;
static const uint8_t A6 = PIN_A6;
static const uint8_t A7 = PIN_A7;

Итак, здесь ядро сначала определяет макрос PIN_A2 как 16 (который является номером pin этого контакта), а затем объявляет статическую константу A2 с PIN_A2. Таким образом, A2 - это просто контакт этого контакта, 16 в данном случае.

Это делается для того, чтобы сделать код более читабельным. Аналоговые контакты помечены A0 до A7, поэтому хорошо также иметь возможность ссылаться на это с помощью этих имен. Если вы хотите, вы также можете использовать контакт напрямую. Но это было бы не так легко прочитать.

,

Это не имеет никакого значения для ответа, но я удивлен, что вы используете версию 1.8.9., @timemage

Я использую его не очень часто, поэтому на самом деле не утруждал себя обновлением. Но вы правы, мне действительно стоит сделать обновление XD, @chrisl


0

Значение символа " A2 " является целым числом - это контакт Arduino. Для Uno он равен 16. Может быть, вы путаете контакт, A2, со значением, считываемым из A/D канала 2? Это будет значение, возвращаемое analogRead(A2) или analogRead(PIN_A2), как это было #define'd. И даже тогда это значение также является целым числом между 0 и 1023, которое представляет напряжение на выводе, 0, представляющее 0v или землю, и 1024, представляющее опорное напряжение (следовательно, 1023 представляет любое напряжение, которое больше или равно ((1023/1024) * Vref).

,