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