почему переменные Arduino типа int могут содержать такое значение как A2
Почему верно следующее утверждение:
int inputPin = A2;
Я думал, что int переменные могут содержать только целые числа. Является ли A
просто представлением числа?
Спасибо за любую помощь
@Brandon Albers, 👍0
Обсуждение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
Значение символа " A2 " является целым числом - это контакт Arduino. Для Uno он равен 16. Может быть, вы путаете контакт, A2, со значением, считываемым из A/D канала 2? Это будет значение, возвращаемое analogRead(A2)
или analogRead(PIN_A2)
, как это было #define'd. И даже тогда это значение также является целым числом между 0 и 1023, которое представляет напряжение на выводе, 0, представляющее 0v или землю, и 1024, представляющее опорное напряжение (следовательно, 1023 представляет любое напряжение, которое больше или равно ((1023/1024) * Vref).
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Объявленная переменная внутри void setup не видится в void loop
- Хранить переменную?
- Сбросить переменную каждую 1 секунду на Arduino.
- Глобальный или локальный
- Использование переменной для индексации массива
- Использование одной и той же переменной между операторами if в loop()
- Функция управления сервоприводами
Обычно я бы проголосовал за то, чтобы закрыть это, так как это довольно просто и действительно связано с языком, и есть бесконечное множество этих вопросов. Но я видел, как *этот* вопрос возникал бесчисленное количество раз в беседах с новыми пользователями Arduino почти *точно* в такой форме, часто вместо этого приводя "A0". Итак, я голосую за то, чтобы оставить его открытым., @timemage
Вероятно, было бы лучше написать "следующее утверждение является **действительным**" или что-то в этом роде, в отличие от "истинно"., @timemage