Какой тип данных имеют метки аналоговых контактов (A0, A1 и т. д.)?

Ардуино Мега

Мне хотелось бы иметь массив, содержащий метки аналоговых контактов, что-то вроде...

int analog_pins[] = {A0, A1, A2, A3};
int num_analog_pins = sizeof(analog_pins) / sizeof(analog_pins[0]);

Возможно ли это? Он скомпилировался без каких-либо предупреждений или ошибок, но у меня нет с собой платы (да, ошибка новичков), поэтому я не могу проверить, работает ли она.

, 👍0

Обсуждение

Прочтите статью в вики, она должна дать вам хорошее представление об операторе **sizeof**. https://en.wikipedia.org/wiki/Sizeof, @RamblinRose


2 ответа


Лучший ответ:

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


2

Ваши вычисления будут правильными для 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