You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// подключить функцию-обработчик событий (вида void f())
272
+
// подключить функцию-обработчик событий
273
273
void attach(void (*handler)());
274
+
void attach(void (*handler)(void* self));
274
275
275
276
// отключить функцию-обработчик событий
276
277
void detach();
@@ -1061,26 +1062,50 @@ void loop() {
1061
1062
}
1062
1063
```
1063
1064
1065
+
С версии 3.6.0 библиотека поддерживает подключение обработчика с отправкой в него указателя на объект:
1066
+
```cpp
1067
+
EncButton eb(2, 3, 4);
1068
+
1069
+
void callback(void* self) {
1070
+
EncButton& enc = *static_cast<EncButton*>(self);
1071
+
1072
+
switch (enc.action()) {
1073
+
case EB_PRESS:
1074
+
// ...
1075
+
break;
1076
+
case EB_HOLD:
1077
+
// ...
1078
+
break;
1079
+
// ...
1080
+
}
1081
+
}
1082
+
1083
+
void setup() {
1084
+
eb.attach(callback);
1085
+
}
1086
+
1087
+
void loop() {
1088
+
eb.tick();
1089
+
}
1090
+
```
1091
+
1064
1092
<aid="double"></a>
1065
1093
1066
1094
### Одновременное нажатие
1067
1095
Библиотека нативно поддерживает работу с двумя одновременно нажатыми кнопками как с третьей кнопкой. Для этого нужно:
1068
-
1. Cоздать виртуальную кнопку `VirtButton`
1069
-
2. Вызвать обработку реальных кнопок
1070
-
3. Передать виртуальной кнопке в обработку эти кнопки (это могут быть объекты классов `VirtButton`, `Button`, `EncButton` + их `T`-версии)
1071
-
4. Далее опрашивать события
1096
+
1. Cоздать специальную кнопку `MultiButton`
1097
+
2. Передать виртуальной кнопке в обработку свои кнопки (это могут быть объекты классов `VirtButton`, `Button`, `EncButton` + их `T`-версии). **Мульти-кнопка сама опросит обе кнопки!**
1098
+
3. Опрашивать события или слушать обработчик
1072
1099
1073
1100
```cpp
1074
1101
Button b0(4);
1075
1102
Button b1(5);
1076
-
VirtButton b2; // 1
1103
+
MultiButton b2; // 1
1077
1104
1078
1105
void loop() {
1079
-
b0.tick(); // 2
1080
-
b1.tick(); // 2
1081
-
b2.tick(b0, b1); // 3
1106
+
b2.tick(b0, b1); // 2
1082
1107
1083
-
// 4
1108
+
// 3
1084
1109
if (b0.click()) Serial.println("b0 click");
1085
1110
if (b1.click()) Serial.println("b1 click");
1086
1111
if (b2.click()) Serial.println("b0+b1 click");
@@ -1792,7 +1817,10 @@ void loop() {
1792
1817
- v3.5.5 - коллбэк на базе std::function для ESP
1793
1818
- v3.5.8 - добавлен метод releaseHoldStep()
1794
1819
- v3.5.11 - добавлен метод skipEvents() для игнорирования событий кнопки в сложных сценариях использования
1795
-
1820
+
- v3.6.0
1821
+
- Добавлен класс MultiButton для корректного опроса нескольких кнопок с вызовом обработчика
1822
+
- Добавлено подключение обработчика с передачей указателя на объект
0 commit comments