Пишем программный код для настройки внешнего прерывания микроконтроллера ESP8266 в среде программирования Arduino IDE. Текстовую версию можно посмотреть на сайте: texnohelp.com/...
Здравствуйте. Не подскажете, в чем может быть проблема. ESP32. описываем прерывание на 12 ноге attachInterrupt(digitalPinToInterrupt(12), prerivanie, RISING); само прерывание void prerivanie() { код исправно включает/гасит по кнопке на 12 ноге диод }, но вот вывод на индикатор 1602 в прерывании никак не происходит и измененные переменные из прерывания в основную программу не попадают . При попытке записать void IRAM_ATTR prerivanie() или же void ICACHE_RAM_ATTR prerivanie() выскакивает ошибка "void ICACHE_RAM_ATTR prerivanie()". Подозреваю что вывод на индикатор не идет, потому что использую библиотеку LiquidCrystal_I2C переменные которой не заявлены как volatile. Чем не нравятся IRAM_ATTR / ICACHE_RAM_ATTR и почему внутри прерывания не работает вывод на индикатор?
А в препывании сразу включать и выключать светодиод нельзя?? Зачем в основном цикле каждый раз условия проверять если внутри прерывания можно помигать светодиодом.
Добрый день! На сколько я знаю, в обработчиках прерываний на UNO (например) крайне не рекомендуют использовать вывод в сериальные порты. На ESP8266 это так же актуально?
Для проверки работы можно вывести и посмотреть, что прерывание работает, а дальше отключить вывод и работать через метку, если нужно в самой программе выводить данные.
Это обучающий пример, при чем есть разные задачи: в одних на прерывание лучше не писать большой код, что бы в нем долго не сидеть, в других нет ограничений на время нахождения в прерывании.