From 164471b2ac61c61f38b1616c9cfe8416e53fa876 Mon Sep 17 00:00:00 2001 From: AlexGyver Date: Thu, 11 Jul 2024 13:46:02 +0300 Subject: [PATCH] upd --- README.md | 95 ++++++++++++++++++++++++++----------------- library.properties | 2 +- src/core/VirtButton.h | 5 +++ 3 files changed, 63 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index fcdca75..7672829 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ # EncButton | ⚠️⚠️⚠️
**Новая версия v3 несовместима с предыдущими, смотри [документацию](#docs), [примеры](#example) и краткий [гайд по миграции](#migrate) с v2 на v3!**
⚠️⚠️⚠️ | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | Лёгкая и очень функциональная библиотека для энкодера с кнопкой, энкодера или кнопки с Arduino - Кнопка @@ -181,48 +181,49 @@
Таблица функций кнопки -| | VirtButton | VirtEncButton | Button | EncButton | -|-----------------|:----------:|:-------------:|:------:|:---------:| -| read | | | ✔ | | -| readBtn | | | | ✔ | -| tickRaw | ✔ | ✔ | ✔ | ✔ | -| setHoldTimeout | ✔ | ✔ | ✔ | ✔ | -| setStepTimeout | ✔ | ✔ | ✔ | ✔ | -| setClickTimeout | ✔ | ✔ | ✔ | ✔ | -| setDebTimeout | ✔ | ✔ | ✔ | ✔ | -| setBtnLevel | ✔ | ✔ | ✔ | ✔ | -| pressISR | ✔ | ✔ | ✔ | ✔ | -| reset | ✔ | ✔ | ✔ | ✔ | -| clear | ✔ | ✔ | ✔ | ✔ | -| attach | ✔ | ✔ | ✔ | ✔ | -| detach | ✔ | ✔ | ✔ | ✔ | -| press | ✔ | ✔ | ✔ | ✔ | -| release | ✔ | ✔ | ✔ | ✔ | -| click | ✔ | ✔ | ✔ | ✔ | -| pressing | ✔ | ✔ | ✔ | ✔ | -| hold | ✔ | ✔ | ✔ | ✔ | -| holding | ✔ | ✔ | ✔ | ✔ | -| step | ✔ | ✔ | ✔ | ✔ | -| hasClicks | ✔ | ✔ | ✔ | ✔ | -| getClicks | ✔ | ✔ | ✔ | ✔ | -| getSteps | ✔ | ✔ | ✔ | ✔ | -| releaseHold | ✔ | ✔ | ✔ | ✔ | -| releaseStep | ✔ | ✔ | ✔ | ✔ | -| releaseHoldStep | ✔ | ✔ | ✔ | ✔ | -| waiting | ✔ | ✔ | ✔ | ✔ | -| busy | ✔ | ✔ | ✔ | ✔ | -| action | ✔ | ✔ | ✔ | ✔ | -| timeout | ✔ | ✔ | ✔ | ✔ | -| pressFor | ✔ | ✔ | ✔ | ✔ | -| holdFor | ✔ | ✔ | ✔ | ✔ | -| stepFor | ✔ | ✔ | ✔ | ✔ | +| | VirtButton | VirtEncButton | Button | EncButton | +| ----------------- | :--------: | :-----------: | :----: | :-------: | +| read | | | ✔ | | +| readBtn | | | | ✔ | +| tickRaw | ✔ | ✔ | ✔ | ✔ | +| setHoldTimeout | ✔ | ✔ | ✔ | ✔ | +| setStepTimeout | ✔ | ✔ | ✔ | ✔ | +| setClickTimeout | ✔ | ✔ | ✔ | ✔ | +| setDebTimeout | ✔ | ✔ | ✔ | ✔ | +| setBtnLevel | ✔ | ✔ | ✔ | ✔ | +| pressISR | ✔ | ✔ | ✔ | ✔ | +| reset | ✔ | ✔ | ✔ | ✔ | +| clear | ✔ | ✔ | ✔ | ✔ | +| skipEvents | ✔ | ✔ | ✔ | ✔ | +| attach | ✔ | ✔ | ✔ | ✔ | +| detach | ✔ | ✔ | ✔ | ✔ | +| press | ✔ | ✔ | ✔ | ✔ | +| release | ✔ | ✔ | ✔ | ✔ | +| click | ✔ | ✔ | ✔ | ✔ | +| pressing | ✔ | ✔ | ✔ | ✔ | +| hold | ✔ | ✔ | ✔ | ✔ | +| holding | ✔ | ✔ | ✔ | ✔ | +| step | ✔ | ✔ | ✔ | ✔ | +| hasClicks | ✔ | ✔ | ✔ | ✔ | +| getClicks | ✔ | ✔ | ✔ | ✔ | +| getSteps | ✔ | ✔ | ✔ | ✔ | +| releaseHold | ✔ | ✔ | ✔ | ✔ | +| releaseStep | ✔ | ✔ | ✔ | ✔ | +| releaseHoldStep | ✔ | ✔ | ✔ | ✔ | +| waiting | ✔ | ✔ | ✔ | ✔ | +| busy | ✔ | ✔ | ✔ | ✔ | +| action | ✔ | ✔ | ✔ | ✔ | +| timeout | ✔ | ✔ | ✔ | ✔ | +| pressFor | ✔ | ✔ | ✔ | ✔ | +| holdFor | ✔ | ✔ | ✔ | ✔ | +| stepFor | ✔ | ✔ | ✔ | ✔ |
Таблица функций энкодера | | VirtEncoder | Encoder | VirtEncButton | EncButton | -|----------------|:-----------:|:-------:|:-------------:|:---------:| +| -------------- | :---------: | :-----: | :-----------: | :-------: | | readEnc | | | | ✔ | | initEnc | ✔ | ✔ | ✔ | ✔ | | setEncReverse | ✔ | ✔ | ✔ | ✔ | @@ -281,6 +282,9 @@ void reset(); // принудительно сбросить флаги событий void clear(); +// игнорировать все события до отпускания кнопки +void skipEvents(); + // ================ ОБРАБОТКА ================ // обработка кнопки значением bool tick(bool s); @@ -1310,6 +1314,20 @@ void loop() { } ``` +### Пропуск событий +EncButton позволяет кнопке работать в паре с энкодером для корректного отслеживания *нажатых поворотов* - при нажатом повороте события с кнопки будут пропущены, т.е. не обработается удержание и клик. Допустим кнопок несколько: они могут выполнять действия как сами по себе, так и в паре с энкодером (кнопка зажата и крутится энкодер, в программе меняется выбранное кнопкой значение). Чтобы при удержании кнопка не генерировала события (удержание, степ, клики...) можно включить пропуск событий. Он будет действовать **до отпускания кнопки**: + +```cpp +if (btn.pressing() && enc.turn()) { + btn.skipEvents(); // зафиксирован поворот. Пропускаем события + // нажатый поворот +} + +if (btn.click()) { + // просто клик +} +``` + ### Мини примеры, сценарии @@ -1424,7 +1442,7 @@ EncoderT e(mode); // + режим пинов энкодера (у ### Функции | v2 | v3 | -|-------------|--------------| +| ----------- | ------------ | | `held()` | `hold()` | | `hold()` | `holding()` | | `state()` | `pressing()` | @@ -1773,6 +1791,7 @@ void loop() { - Добавлено количество кликов в опрос press/release/click/pressing - v3.5.5 - коллбэк на базе std::function для ESP - v3.5.8 - добавлен метод releaseHoldStep() +- v3.5.11 - добавлен метод skipEvents() для игнорирования событий кнопки в сложных сценариях использования ## Баги и обратная связь diff --git a/library.properties b/library.properties index 4e13aa4..427ee44 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=EncButton -version=3.5.10 +version=3.5.11 author=AlexGyver maintainer=AlexGyver sentence=Light and powerful library for button and encoder operation for Arduino diff --git a/src/core/VirtButton.h b/src/core/VirtButton.h index be53682..f005f70 100644 --- a/src/core/VirtButton.h +++ b/src/core/VirtButton.h @@ -128,6 +128,11 @@ class VirtButton { } } + // игнорировать все события до отпускания кнопки + void skipEvents() { + bf.set(EB_EHLD); + } + // подключить функцию-обработчик событий (вида void f()) void attach(ActionHandler handler) { #ifndef EB_NO_CALLBACK