Чтение спецификаций оборудования Arduino на C++

Недавно я начал программировать на C++ и Arduino, что доставляет массу удовольствия! У меня есть разные платы, например, Arduino UNO R3, Arduino Mini и Arduino-совместимая Teensy 3.2.

Я хотел бы, чтобы моя программа автоматически выбирала определенные контакты. По библиотеке EEPROM (не уверен, что библиотека является правильным термином, поскольку я сказал, что я новичок в С++) я могу получить размер EEPROM каждой платы. Есть ли способ получить другие данные, например, сколько цифровых/аналоговых контактов на плате, которые можно использовать в качестве входных и выходных контактов?


person KoalaGangsta    schedule 19.11.2016    source источник


Ответы (1)


Количество цифровых выводов определяется в макросе NUM_DIGITAL_PINS.

Количество контактов аналогового входа определяется в макросе NUM_ANALOG_INPUTS.

Макросы находятся по адресу (добавлены по запросу ОП):

Uno: https://github.com/arduino/Arduino/blob/1.6.12/hardware/arduino/avr/variants/standard/pins_arduino.h#L28-L29

#define NUM_DIGITAL_PINS            20
#define NUM_ANALOG_INPUTS 6

Мини: https://github.com/arduino/Arduino/blob/1.6.12/hardware/arduino/avr/variants/standard/pins_arduino.h#L28

#define NUM_DIGITAL_PINS            20

а также

https://github.com/arduino/Arduino/blob/1.6.12/hardware/arduino/avr/variants/eightanaloginputs/pins_arduino.h#L25

#include "../standard/pins_arduino.h"
#undef NUM_ANALOG_INPUTS
#define NUM_ANALOG_INPUTS 8

Teensy 3.x: https://github.com/PaulStoffregen/cores/blob/1.31/teensy3/core_pins.h#L97-L127

#if defined(__MK20DX128__)

#define CORE_NUM_TOTAL_PINS     34
#define CORE_NUM_DIGITAL        34
#define CORE_NUM_INTERRUPT      34
#define CORE_NUM_ANALOG         14
#define CORE_NUM_PWM            10
#elif defined(__MK20DX256__)
#define CORE_NUM_TOTAL_PINS     34
#define CORE_NUM_DIGITAL        34
#define CORE_NUM_INTERRUPT      34
#define CORE_NUM_ANALOG         21
#define CORE_NUM_PWM            12
#elif defined(__MKL26Z64__)
#define CORE_NUM_TOTAL_PINS     27
#define CORE_NUM_DIGITAL        27
#define CORE_NUM_INTERRUPT      24  // really only 18, but 6 "holes"
#define CORE_NUM_ANALOG         13
#define CORE_NUM_PWM            10
#elif defined(__MK64FX512__)
#define CORE_NUM_TOTAL_PINS     64
#define CORE_NUM_DIGITAL        64
#define CORE_NUM_INTERRUPT      64
#define CORE_NUM_ANALOG         27
#define CORE_NUM_PWM            20
#elif defined(__MK66FX1M0__)
#define CORE_NUM_TOTAL_PINS     64
#define CORE_NUM_DIGITAL        64
#define CORE_NUM_INTERRUPT      64
#define CORE_NUM_ANALOG         25
#define CORE_NUM_PWM            22
#endif

а также

https://github.com/PaulStoffregen/cores/blob/1.31/teensy3/pins_arduino.h#L157-L158

#define NUM_DIGITAL_PINS  CORE_NUM_DIGITAL
#define NUM_ANALOG_INPUTS CORE_NUM_ANALOG

Их можно найти в аналогичных местах для других досок. Вам просто нужно проверить значение build.variant, установленное в файле boards.txt для этой платы, а затем перейти в папку с тем же именем в папке variants платформы платы.

Вы можете найти некоторые другие полезные вещи, просматривая эти файлы вариантов.

person per1234    schedule 19.11.2016
comment
Интересно, я не могу найти никаких источников для этого. Как вы к этому пришли? Я дам вам лучший ответ, но был бы очень рад, если бы вы могли обновить, где вы это нашли. Большое спасибо! :) - person KoalaGangsta; 19.11.2016
comment
Я собирался добавить это к своему ответу, но он немного отличается в зависимости от доски, поэтому в итоге я его удалил. - person per1234; 19.11.2016
comment
Большое спасибо за ваши усилия! :) - person KoalaGangsta; 19.11.2016