Какой тип данных имеют метки аналоговых контактов (A0, A1 и т. д.)?
Ардуино Мега
Мне хотелось бы иметь массив, содержащий метки аналоговых контактов, что-то вроде...
int analog_pins[] = {A0, A1, A2, A3};
int num_analog_pins = sizeof(analog_pins) / sizeof(analog_pins[0]);
Возможно ли это? Он скомпилировался без каких-либо предупреждений или ошибок, но у меня нет с собой платы (да, ошибка новичков), поэтому я не могу проверить, работает ли она.
@DrBwts, 👍0
Обсуждение2 ответа
Лучший ответ:
Как вы можете видеть в Arduino.h, файл AnalyRead () имеет uint8_t
в качестве параметра. Вы можете определить их как byte
или uint8_t
, и вам не обязательно использовать sizeof().
Тип A0 определен в файле pins_arduino.h:
#define PIN_A0 (14)
static const uint8_t A0 = PIN_A0;
Тем не менее, с целыми числами у вас тоже все в порядке.
Если у вас нет платы Arduino, вы можете использовать симуляцию Arduino Uno на сайте Tinkercad.
>Как пишет @DataFiddler ниже этого ответа, предпочтительнее использовать ключевое слово const:
const uint8_t analog_pins[] = {A0, A1, A2, A3};
const uint8_t Analog_pins[]
может быть даже лучше, что в конечном итоге позволит провести значительную оптимизацию компилятора., @DataFiddler
Ваши вычисления будут правильными для num_analog_pins, однако принято использовать тип массива следующим образом
int num_analog_pins = sizeof(analog_pins) / sizeof(int);
Как заметил @Jot, вы сэкономите много места, объявив свой массив с помощью uint8_t вот так
uint8_t analog_pins[] = {A0, A1, A2, A3};
uint8_t num_analog_pins = sizeof(analog_pins) / sizeof(uint8_t);
sizeof(uint8_t)
:-) очень официально, @Juraj
@Юрай, ха-ха, действительно! Я всегда писал такой код ради переносимости и ясности., @RamblinRose
@RamblinRose Вам следует написать uint8_t num_analog_pins = sizeof(analog_pins) / sizeof(analog_pins[0]);
, @SBF
@MarkSmith Меня смутил ваш комментарий: sizeof возвращает количество байтов, выделенных для массива, sizeof(array) / sizeof(array_type) = количество элементов массива., @RamblinRose
Извиняюсь, я не увидел там знаменателя. Комментарий удален., @Mark Smith
- Объяснение типа данных в отношении AnalogRead фоторезистора
- Проверить возможности PIN во время компиляции
- NodeMCU - Vin контакт как выход 5V?
- Использовать все контакты как цифровые входы/выходы
- Как получить тип данных переменной?
- Преобразование в Unix Timestamp и обратно
- Что такое ICSP pin (разъём)?
- Сколько датчиков может поддерживать один модуль Arduino?
Прочтите статью в вики, она должна дать вам хорошее представление об операторе **sizeof**. https://en.wikipedia.org/wiki/Sizeof, @RamblinRose