Какой тип данных имеют метки аналоговых контактов (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?
- Использовать все контакты как цифровые входы/выходы
- Как получить тип данных переменной?
- Что представляют собой AREF, IOREF и немаркированный контакт рядом с IOREF на Uno R3?
- Преобразование в Unix Timestamp и обратно
- Что такое ICSP pin (разъём)?
Прочтите статью в вики, она должна дать вам хорошее представление об операторе **sizeof**. https://en.wikipedia.org/wiki/Sizeof, @RamblinRose