Skip to content

Commit 38c46c0

Browse files
committed
upd
1 parent 2eadc61 commit 38c46c0

File tree

7 files changed

+188
-52
lines changed

7 files changed

+188
-52
lines changed

README.md

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@
123123
Объявлять до подключения библиотеки
124124

125125
```cpp
126+
// отключить поддержку pressFor/holdFor/stepFor и счётчик степов (экономит 2 байта оперативки)
127+
#define EB_NO_FOR
128+
126129
// отключить обработчик событий attach (экономит 2 байта оперативки)
127130
#define EB_NO_CALLBACK
128131

@@ -142,7 +145,7 @@
142145
*/
143146
#define EB_DEB_TIME 50 // таймаут гашения дребезга кнопки (кнопка)
144147
#define EB_CLICK_TIME 500 // таймаут ожидания кликов (кнопка)
145-
#define EB_HOLD_TIME 500 // таймаут удержания (кнопка)
148+
#define EB_HOLD_TIME 600 // таймаут удержания (кнопка)
146149
#define EB_STEP_TIME 200 // таймаут импульсного удержания (кнопка)
147150
#define EB_FAST_TIME 30 // таймаут быстрого поворота (энкодер)
148151
```
@@ -194,12 +197,16 @@
194197
| step | ✔ | ✔ | ✔ | ✔ |
195198
| hasClicks | ✔ | ✔ | ✔ | ✔ |
196199
| getClicks | ✔ | ✔ | ✔ | ✔ |
200+
| getSteps | ✔ | ✔ | ✔ | ✔ |
197201
| releaseHold | ✔ | ✔ | ✔ | ✔ |
198202
| releaseStep | ✔ | ✔ | ✔ | ✔ |
199-
| timeout | ✔ | ✔ | ✔ | ✔ |
200203
| waiting | ✔ | ✔ | ✔ | ✔ |
201204
| busy | ✔ | ✔ | ✔ | ✔ |
202205
| action | ✔ | ✔ | ✔ | ✔ |
206+
| timeout | ✔ | ✔ | ✔ | ✔ |
207+
| pressFor | ✔ | ✔ | ✔ | ✔ |
208+
| holdFor | ✔ | ✔ | ✔ | ✔ |
209+
| stepFor | ✔ | ✔ | ✔ | ✔ |
203210
</details>
204211
205212
<details>
@@ -236,7 +243,7 @@
236243
237244
```cpp
238245
// ================ НАСТРОЙКИ ================
239-
// установить таймаут удержания, умолч. 500 (макс. 4000 мс)
246+
// установить таймаут удержания, умолч. 600 (макс. 4000 мс)
240247
void setHoldTimeout(uint16_t tout);
241248
242249
// установить таймаут импульсного удержания, умолч. 200 (макс. 4000 мс)
@@ -315,6 +322,9 @@ bool hasClicks(uint8_t num);
315322
// получить количество кликов
316323
uint8_t getClicks();
317324
325+
// получить количество степов
326+
uint16_t getSteps();
327+
318328
// кнопка отпущена после удержания [событие]
319329
bool releaseHold();
320330
@@ -327,9 +337,6 @@ bool releaseStep();
327337
// кнопка отпущена после импульсного удержания с предварительными кликами [событие]
328338
bool releaseStep(uint8_t num);
329339
330-
// после взаимодействия с кнопкой (или энкодером EncButton) прошло указанное время, мс [событие]
331-
bool timeout(uint16_t tout);
332-
333340
// кнопка ожидает повторных кликов (между click() и hasClicks()) [состояние]
334341
bool waiting();
335342
@@ -339,6 +346,27 @@ bool busy();
339346
// было действие с кнопки, вернёт код события [событие]
340347
uint16_t action();
341348
349+
// ================== ВРЕМЯ ==================
350+
// после взаимодействия с кнопкой (или энкодером EncButton) прошло указанное время, мс [событие]
351+
bool timeout(uint16_t ms);
352+
353+
// время, которое кнопка удерживается (с начала нажатия), мс
354+
uint16_t pressFor();
355+
356+
// кнопка удерживается дольше чем (с начала нажатия), мс [состояние]
357+
bool pressFor(uint16_t ms);
358+
359+
// время, которое кнопка удерживается (с начала удержания), мс
360+
uint16_t holdFor();
361+
362+
// кнопка удерживается дольше чем (с начала удержания), мс [состояние]
363+
bool holdFor(uint16_t ms);
364+
365+
// время, которое кнопка удерживается (с начала степа), мс
366+
uint16_t stepFor();
367+
368+
// кнопка удерживается дольше чем (с начала степа), мс [состояние]
369+
bool stepFor(uint16_t ms);
342370
```
343371
</details>
344372
<details>
@@ -924,12 +952,13 @@ switch (eb.action()) {
924952
#### Вес библиотеки
925953
Для максимального уменьшения веса библиотеки (в частности в оперативной памяти) нужно задавать тайматуы константами через define (экономия 1 байт за таймаут), отключить обработчик событий, счётчики-буферы и использовать T-класс (экономия 1 байт за пин):
926954
```cpp
955+
#define EB_NO_FOR
927956
#define EB_NO_CALLBACK
928957
#define EB_NO_COUNTER
929958
#define EB_NO_BUFFER
930959
#define EB_DEB_TIME 50 // таймаут гашения дребезга кнопки (кнопка)
931960
#define EB_CLICK_TIME 500 // таймаут ожидания кликов (кнопка)
932-
#define EB_HOLD_TIME 500 // таймаут удержания (кнопка)
961+
#define EB_HOLD_TIME 600 // таймаут удержания (кнопка)
933962
#define EB_STEP_TIME 200 // таймаут импульсного удержания (кнопка)
934963
#define EB_FAST_TIME 30 // таймаут быстрого поворота (энкодер)
935964
#include <EncButton.h>
@@ -1215,7 +1244,7 @@ EncoderT<enc0, enc1> e(mode); // + режим пинов энкодера (у
12151244
12161245
// #define EB_DEB_TIME 50 // таймаут гашения дребезга кнопки (кнопка)
12171246
// #define EB_CLICK_TIME 500 // таймаут ожидания кликов (кнопка)
1218-
// #define EB_HOLD_TIME 500 // таймаут удержания (кнопка)
1247+
// #define EB_HOLD_TIME 600 // таймаут удержания (кнопка)
12191248
// #define EB_STEP_TIME 200 // таймаут импульсного удержания (кнопка)
12201249
// #define EB_FAST_TIME 30 // таймаут быстрого поворота (энкодер)
12211250
@@ -1232,7 +1261,7 @@ void setup() {
12321261
eb.setBtnLevel(LOW);
12331262
eb.setClickTimeout(500);
12341263
eb.setDebTimeout(50);
1235-
eb.setHoldTimeout(500);
1264+
eb.setHoldTimeout(600);
12361265
eb.setStepTimeout(200);
12371266
12381267
eb.setEncReverse(0);
@@ -1512,6 +1541,9 @@ void loop() {
15121541
- v3.2
15131542
- Добавлены функции tickRaw() и clear() для всех классов. Позволяет проводить раздельную обработку (см. доку)
15141543
- Улучшена обработка кнопки с использованием прерываний
1544+
- v3.3
1545+
- Добавлены функции получения времени удержания pressFor(), holdFor(), stepFor() (отключаемые)
1546+
- Добавлен счётчик степов getSteps() (отключаемый)
15151547
15161548
<a id="feedback"></a>
15171549
## Баги и обратная связь

examples/callback/callback.ino

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ void cb() {
1818
Serial.println("step");
1919
break;
2020
case EB_RELEASE:
21-
Serial.println("release");
21+
Serial.print("release. steps: ");
22+
Serial.print(eb.getSteps());
23+
Serial.print(", press for: ");
24+
Serial.print(eb.pressFor());
25+
Serial.print(", hold for: ");
26+
Serial.print(eb.holdFor());
27+
Serial.print(", step for: ");
28+
Serial.println(eb.stepFor());
2229
break;
2330
case EB_CLICK:
2431
Serial.println("click");
@@ -49,7 +56,8 @@ void cb() {
4956
Serial.print("release step clicks ");
5057
Serial.println(eb.getClicks());
5158
break;
52-
default: Serial.println();
59+
default:
60+
Serial.println();
5361
}
5462
}
5563

examples/demo/demo.ino

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
// полное демо
22
#include <Arduino.h>
3+
// #define EB_NO_FOR // отключить поддержку pressFor/holdFor/stepFor и счётчик степов (экономит 2 байта оперативки)
34
// #define EB_NO_CALLBACK // отключить обработчик событий attach (экономит 2 байта оперативки)
45
// #define EB_NO_COUNTER // отключить счётчик энкодера (экономит 4 байта оперативки)
56
// #define EB_NO_BUFFER // отключить буферизацию энкодера (экономит 1 байт оперативки)
67

78
// #define EB_DEB_TIME 50 // таймаут гашения дребезга кнопки (кнопка)
89
// #define EB_CLICK_TIME 500 // таймаут ожидания кликов (кнопка)
9-
// #define EB_HOLD_TIME 500 // таймаут удержания (кнопка)
10+
// #define EB_HOLD_TIME 600 // таймаут удержания (кнопка)
1011
// #define EB_STEP_TIME 200 // таймаут импульсного удержания (кнопка)
1112
// #define EB_FAST_TIME 30 // таймаут быстрого поворота (энкодер)
1213

1314
#include <EncButton.h>
1415
EncButton eb(2, 3, 4);
15-
//EncButton eb(2, 3, 4, INPUT); // + режим пинов энкодера
16-
//EncButton eb(2, 3, 4, INPUT, INPUT_PULLUP); // + режим пинов кнопки
16+
// EncButton eb(2, 3, 4, INPUT); // + режим пинов энкодера
17+
// EncButton eb(2, 3, 4, INPUT, INPUT_PULLUP); // + режим пинов кнопки
1718

1819
void setup() {
1920
Serial.begin(115200);
@@ -22,7 +23,7 @@ void setup() {
2223
eb.setBtnLevel(LOW);
2324
eb.setClickTimeout(500);
2425
eb.setDebTimeout(50);
25-
eb.setHoldTimeout(500);
26+
eb.setHoldTimeout(600);
2627
eb.setStepTimeout(200);
2728

2829
eb.setEncReverse(0);
@@ -53,7 +54,16 @@ void loop() {
5354

5455
// кнопка
5556
if (eb.press()) Serial.println("press");
56-
if (eb.release()) Serial.println("release");
57+
if (eb.release()) {
58+
Serial.print("release. steps: ");
59+
Serial.print(eb.getSteps());
60+
Serial.print(", press for: ");
61+
Serial.print(eb.pressFor());
62+
Serial.print(", hold for: ");
63+
Serial.print(eb.holdFor());
64+
Serial.print(", step for: ");
65+
Serial.println(eb.stepFor());
66+
}
5767
if (eb.click()) Serial.println("click");
5868

5969
// состояния

keywords.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ VirtButton KEYWORD1
1616
EB_NO_COUNTER KEYWORD1
1717
EB_NO_BUFFER KEYWORD1
1818
EB_NO_CALLBACK KEYWORD1
19+
EB_NO_FOR KEYWORD1
1920

2021
EB_DEB_TIME KEYWORD1
2122
EB_CLICK_TIME KEYWORD1
@@ -42,6 +43,7 @@ holding KEYWORD2
4243
step KEYWORD2
4344
hasClicks KEYWORD2
4445
getClicks KEYWORD2
46+
getSteps KEYWORD2
4547
releaseHold KEYWORD2
4648
releaseStep KEYWORD2
4749
timeout KEYWORD2
@@ -50,6 +52,9 @@ busy KEYWORD2
5052
action KEYWORD2
5153
attach KEYWORD2
5254
pressISR KEYWORD2
55+
pressFor KEYWORD2
56+
holdFor KEYWORD2
57+
stepFor KEYWORD2
5358

5459
setEncReverse KEYWORD2
5560
setEncType KEYWORD2

library.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
name=EncButton
2-
version=3.2
2+
version=3.3
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Light and powerful library for button and encoder operation for Arduino
66
paragraph=Debounce, click count, hold, step hold mode and many more. Maximum possibilities for button and encoder
77
category=Sensors
88
url=https://github.com/GyverLibs/EncButton
9-
architectures=*
9+
architectures=*

0 commit comments

Comments
 (0)