Проверить возможности PIN во время компиляции
Существуют ли независимые от платы функции для проверки возможностей pin-контакта во время компиляции?
- Можно ли использовать pin в качестве вывода, как в
digitalWrite()
? - Поддерживает ли контакт ШИМ, как в
analogWrite()
? - Поддерживает ли пин АЦП, как в
analogRead()
? - Поддерживает ли контакт прерывания, как в
attachInterrupt()
?
Я ищу функции/макросы, такие как, например, isDigitalOutput(pin)
, которые возвращали бы false для только входных контактов, таких как A6 и A7 на 328P, но true на Mega, где эти контакты являются входом/выходом.
1 ответ
Для совместимости с analogWrite()
есть макрос digitalPinHasPWM(p)
, который возвращает 1, когда ШИМ поддерживается на выводе p
.
Для analogRead()
есть analogInputToDigitalPin ()
, который можно использовать как
#if ((p-PIN_A0 < 0) || (analogInputToDigitalPin(p-PIN_A0) != p))
#error Not an analog pin!
#endif
Для функции attachInterrupt()
существует функция digitalPinToInterrupt(p)
, которая возвращает значение NOT_AN_INTERRUPT,
если вывод p
не поддерживает прерывания.
Я до сих пор не нашел ничего, чтобы проверить совместимость с digitalWrite()
.
вы спросили о времени компиляции, @Juraj
@Juraj Правильно, " A0 "не является макросом (вместо этого необходимо использовать "PIN_A0")., @Dmitry Grigoryev
но ответ касается времени выполнения, @Juraj
@Juraj Нет, все вышеперечисленные проверки являются макросами., @Dmitry Grigoryev
извините, я понимаю. после редактирования это макрос, @Juraj
- Опасно ли соединять два выходных контакта вместе?
- Отправка значения с одного Arduino на другой
- Arduino непрерывно считывает значение АЦП с помощью прерывания
- Несколько кнопок на одном прерывании, как устранить дребезг?
- Как использовать attachInterrupt() в ATtiny85 с Arduino IDE?
- Какой тип данных имеют метки аналоговых контактов (A0, A1 и т. д.)?
- Случайная ошибка "Compilation error: Error: 13 INTERNAL: exit status 1". Как устранить или что вызывает эту ошибку
- Какой аналог PORTx для Teensy (4.0)?
Я боюсь, что нет, лучше всего посмотреть документацию или схемы для платы, если вы хотите сделать это самостоятельно, вы можете установить любой контакт в любое из состояний и проверить, правильно ли он работает, и сделать некоторые заметки, @Coder9390
@Coder9390 Я хотел проверить функцию библиотеки, для которой требуется аналоговый контакт, но я думаю, что просто отброшу эту идею. Ни в коем случае я не собираюсь искать каждый аналоговый штифт на каждой возможной плате., @Dmitry Grigoryev
возможно, проверка определения " A0 " сработает, @jsotola
Firmata содержит большой список определений контактов для плат. Официальная версия https://github.com/firmata/ConfigurableFirmata/blob/master/src/utility/Boards.h немного устарел, но наиболее распространенные Ардуино включены, @PMF
https://github.com/arduino/ArduinoCore-avr/blob/9f8d27f09f3bbd1da1374b5549a82bda55d45d44/variants/mega/pins_arduino.h#L27, @Juraj