Skip to content

Commit 1e03c02

Browse files
committed
upd
1 parent 5b6efc8 commit 1e03c02

File tree

9 files changed

+47
-17
lines changed

9 files changed

+47
-17
lines changed

README.md

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
| reset | ✔ | ✔ | ✔ | ✔ |
191191
| clear | ✔ | ✔ | ✔ | ✔ |
192192
| attach | ✔ | ✔ | ✔ | ✔ |
193+
| detach | ✔ | ✔ | ✔ | ✔ |
193194
| press | ✔ | ✔ | ✔ | ✔ |
194195
| release | ✔ | ✔ | ✔ | ✔ |
195196
| click | ✔ | ✔ | ✔ | ✔ |
@@ -234,10 +235,10 @@
234235
| left | | | ✔ | ✔ |
235236
| rightH | | | ✔ | ✔ |
236237
| leftH | | | ✔ | ✔ |
237-
| encHolding | | | ✔ | ✔ |
238238
| action | | | ✔ | ✔ |
239239
| timeout | | | ✔ | ✔ |
240240
| attach | | | ✔ | ✔ |
241+
| detach | | | ✔ | ✔ |
241242
</details>
242243
243244
<details>
@@ -264,6 +265,9 @@ void setBtnLevel(bool level);
264265
// подключить функцию-обработчик событий (вида void f())
265266
void attach(void (*handler)());
266267
268+
// отключить функцию-обработчик событий
269+
void detach();
270+
267271
// ================== СБРОС ==================
268272
// сбросить системные флаги (принудительно закончить обработку)
269273
void reset();
@@ -460,9 +464,6 @@ bool rightH();
460464
// нажатый поворот налево [событие]
461465
bool leftH();
462466
463-
// нажата кнопка энкодера [состояние]
464-
bool encHolding();
465-
466467
// было действие с кнопки или энкодера, вернёт код события [событие]
467468
uint16_t action();
468469
@@ -822,6 +823,7 @@ eb.counter = 0; // обнулять
822823
#### Обработка энкодера с кнопкой
823824
- Поворот энкодера при зажатой кнопке снимает и блокирует все последующие события и клики, за исключением события `release`. Состояния нажатой кнопки не изменяются
824825
- Поворот энкодера также влияет на системный таймаут (функция `timeout()`) - сработает через указанное время после поворота энкодера
826+
- Счётчик кликов доступен при нажатом повороте: несколько кликов, зажатие кнопки, поворот
825827

826828
<a id="preclicks"></a>
827829

@@ -1214,11 +1216,24 @@ if (enc.turn()) {
12141216
var += enc.fast() ? 10 : 1;
12151217

12161218
// меняем с шагом 1 при обычном повороте, 10 при нажатом
1217-
var += enc.encHolding() ? 10 : 1;
1219+
var += enc.pressing() ? 10 : 1;
12181220

12191221
// меняем одну переменную при повороте, другую - при нажатом повороте
1220-
if (enc.encHolding()) var0++;
1222+
if (enc.pressing()) var0++;
12211223
else var1++;
1224+
1225+
// если кнопка нажата - доступны предварительные клики
1226+
// Выбираем переменную для изменения по предв. кликам
1227+
if (enc.pressing()) {
1228+
switch (enc.getClicks()) {
1229+
case 1: var0 += enc.dir();
1230+
break;
1231+
case 2: var1 += enc.dir();
1232+
break;
1233+
case 3: var2 += enc.dir();
1234+
break;
1235+
}
1236+
}
12221237
}
12231238

12241239
// импульсное удержание на каждом шаге инкрементирует переменную
@@ -1364,9 +1379,11 @@ void loop() {
13641379
Serial.print(", fast ");
13651380
Serial.print(eb.fast());
13661381
Serial.print(", hold ");
1367-
Serial.print(eb.encHolding());
1382+
Serial.print(eb.pressing());
13681383
Serial.print(", counter ");
1369-
Serial.println(eb.counter);
1384+
Serial.print(eb.counter);
1385+
Serial.print(", clicks ");
1386+
Serial.println(eb.getClicks());
13701387
}
13711388
13721389
// обработка поворота раздельная
@@ -1465,7 +1482,7 @@ void callback() {
14651482
Serial.print(" ");
14661483
Serial.print(eb.fast());
14671484
Serial.print(" ");
1468-
Serial.println(eb.encHolding());
1485+
Serial.println(eb.pressing());
14691486
break;
14701487
case EB_REL_HOLD:
14711488
Serial.println("release hold");
@@ -1633,6 +1650,9 @@ void loop() {
16331650
- v3.3
16341651
- Добавлены функции получения времени удержания pressFor(), holdFor(), stepFor() (отключаемые)
16351652
- Добавлен счётчик степов getSteps() (отключаемый)
1653+
- v3.4
1654+
- Доступ к счётчику кликов во время нажатого поворота
1655+
- Добавлена функция detach()
16361656
16371657
<a id="feedback"></a>
16381658
## Баги и обратная связь

examples/callback/callback.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void cb() {
4040
Serial.print(" ");
4141
Serial.print(eb.fast());
4242
Serial.print(" ");
43-
Serial.println(eb.encHolding());
43+
Serial.println(eb.pressing());
4444
break;
4545
case EB_REL_HOLD:
4646
Serial.println("release hold");

examples/demo/demo.ino

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ void loop() {
4444
Serial.print(", fast ");
4545
Serial.print(eb.fast());
4646
Serial.print(", hold ");
47-
Serial.print(eb.encHolding());
47+
Serial.print(eb.pressing());
4848
Serial.print(", counter ");
49-
Serial.println(eb.counter);
49+
Serial.print(eb.counter);
50+
Serial.print(", clicks ");
51+
Serial.println(eb.getClicks());
5052
}
5153

5254
// обработка поворота раздельная

examples/isr/isr.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void loop() {
3030
Serial.print(", fast ");
3131
Serial.print(eb.fast());
3232
Serial.print(", hold ");
33-
Serial.print(eb.encHolding());
33+
Serial.print(eb.pressing());
3434
Serial.print(", counter ");
3535
Serial.println(eb.counter);
3636
}

examples/one_enc_3_var/one_enc_3_var.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void loop() {
3535
break;
3636
case 2:
3737
// изменение с шагом 1, при зажатой кнопке шаг 5
38-
var2 += (eb.encHolding() ? 5 : 1) * eb.dir();
38+
var2 += (eb.pressing() ? 5 : 1) * eb.dir();
3939
break;
4040
case 3:
4141
// изменение с шагом 1, при быстром вращении шаг 5

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ waiting KEYWORD2
5151
busy KEYWORD2
5252
action KEYWORD2
5353
attach KEYWORD2
54+
detach KEYWORD2
5455
pressISR KEYWORD2
5556
pressFor KEYWORD2
5657
holdFor KEYWORD2

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=EncButton
2-
version=3.3
2+
version=3.4
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Light and powerful library for button and encoder operation for Arduino

src/core/VirtButton.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ class VirtButton {
126126
#endif
127127
}
128128

129+
// отключить функцию-обработчик событий
130+
void detach() {
131+
#ifndef EB_NO_CALLBACK
132+
cb = nullptr;
133+
#endif
134+
}
135+
129136
// ====================== GET ======================
130137
// кнопка нажата [событие]
131138
bool press() {

src/core/VirtEncButton.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
5757
return !read_ef(EB_DIR) && turnH();
5858
}
5959

60-
// нажата кнопка энкодера [состояние]
60+
// нажата кнопка энкодера. Аналог pressing() [состояние]
6161
bool encHolding() {
6262
return read_bf(EB_EHLD);
6363
}
@@ -149,8 +149,8 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
149149
encf = 1;
150150
}
151151
if (encf) {
152-
if (clicks) clicks = 0; // сбросить клики
153152
if (read_bf(EB_PRS)) set_bf(EB_EHLD); // зажать энкодер
153+
else clicks = 0;
154154
if (!read_bf(EB_TOUT)) set_bf(EB_TOUT); // таймаут
155155
set_ef(EB_ETRN_R); // флаг поворота
156156
}

0 commit comments

Comments
 (0)