Написал себе библиотеку для кнопок, делюсь.
ESPAsyncButton
Библиотека предназначенна для работы под платформой ESP32 для IDF/Arduino
Принцип работы - регистрация событий, обработка событий.
Библиотека полностью асинхронная, построена на использовании RTOS функций генерации/передачи сообщений между тредами. Предназначена для работы в многопоточных проектах на основе тредов/тасок/очередей и т.п. сценариях.
Например регистрация срабатывания кнопки выполняется по прерыванию, а вызов связанного с "нажатием" коллбека осуществляется из другого треда.
Реализованные функции:
Диаграммы состояний кнопки и примеры использования можно найти в репозитории.
Внимание! При работе с библиотекой желательно иметь представление о том что такое асинхронное многопоточное программирование, базовые принципы работы RTOS. Нужно отдавать себе отчет что библиотека может обрабатывать вашу кнопку в весьма неожиданных "местах" вашего кода, там где вы можете себе меньше всего этого ожидать.
ESPAsyncButton
Библиотека предназначенна для работы под платформой ESP32 для IDF/Arduino
Принцип работы - регистрация событий, обработка событий.
Библиотека полностью асинхронная, построена на использовании RTOS функций генерации/передачи сообщений между тредами. Предназначена для работы в многопоточных проектах на основе тредов/тасок/очередей и т.п. сценариях.
- не имеет никаких завязок на ардуино loop()
- не выполняет опроса пинов, не требует периодического вызова по таймеру, миллисам и пр.
- не выполняет пользовательский код в обработчиках прерываний
Например регистрация срабатывания кнопки выполняется по прерыванию, а вызов связанного с "нажатием" коллбека осуществляется из другого треда.
Реализованные функции:
- обработка состояния гпио по аппаратным прерываниям
- настраиваемый антидребезг
- обработка различных логических состояний кнопки
- нажатие/отпуск
- долгое нажатие/удержание
- клик (быстрое нажатие/отпуск)
- автоповтор нажатий по удержанию
- многократные последовательные быстрые нажатия (мультиклики)
- получение информации о количестве последовательных нажатий, выполненных автоповторов
- возможность обрабатывать связанные события от нескольких кнопок
- референсный класс реализующий многоуровневые коллбеки в виде "страничного меню" для произвольного числа "кнопок".
- тесная интеграция с ESP Event Loop Library
- простой класс для быстрой настроки одиночной кнопки через коллбеки
- класс псевдо-энкодера на двух тактовых кнопках
- относительный счет "поворотов" (инкремент/декремент)
- настраиваемый шаг, текущее значение счетчика
- настраиваемый верхний/нижний предел счетчика
- функция перескока от минимума к максимуму и обратно
- автоинкремент/декремент при удержании кнопок
- прогрессивный инкремент/декремент при многократных нажатиях
Диаграммы состояний кнопки и примеры использования можно найти в репозитории.
Внимание! При работе с библиотекой желательно иметь представление о том что такое асинхронное многопоточное программирование, базовые принципы работы RTOS. Нужно отдавать себе отчет что библиотека может обрабатывать вашу кнопку в весьма неожиданных "местах" вашего кода, там где вы можете себе меньше всего этого ожидать.
Изменено: