Skip to content

Commit c912a92

Browse files
committed
upd
1 parent 19e3e6c commit c912a92

File tree

5 files changed

+116
-8
lines changed

5 files changed

+116
-8
lines changed

README.md

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,17 @@ int8_t getDir(); // направление последнего поворо
163163
int counter; // доступ к счётчику энкодера
164164

165165
// ================ BUTTON ================
166+
bool state(); // текущий статус кнопки
166167
bool press(); // кнопка нажата
167168
bool release(); // кнопка отпущена
168169
bool click(); // клик
169170
bool held(); // было удержание (однократное срабатывание)
170171
bool hold(); // удерживается (постоянное срабатывание)
171172
bool step(); // режим импульсного удержания
173+
bool step(uint8_t clicks); // режим импульсного удержания с предварительным накликиванием
172174
bool releaseStep(); // отпущена после режима step
173-
bool state(); // текущий статус кнопки
175+
bool releaseStep(uint8_t clicks); // отпущена после режима step с предварительным накликиванием
176+
174177
uint8_t clicks; // доступ к счётчику кликов
175178
uint8_t hasClicks(); // вернёт количество кликов, если они есть
176179
bool hasClicks(uint8_t num); // проверка на наличие указанного количества кликов
@@ -223,6 +226,7 @@ void pullUp(); // здесь не реализована!
223226
- Точный алгоритм активируется добавлением `#define EB_BETTER_ENC` перед подключением библиотеки
224227
- Версия библиотеки *EncButton2.h* хранит номера пинов в классе. Используйте эту версию для создания массива объектов EncButton!
225228

229+
226230
<a id="example"></a>
227231
## Примеры
228232
### Полное демо tick
@@ -320,6 +324,57 @@ void loop() {
320324
}
321325
```
322326

327+
### Одна кнопка управляет несколькими переменными
328+
```cpp
329+
// используем одну КНОПКУ для удобного изменения трёх переменных
330+
// первая - один клик, затем удержание (нажал-отпустил-нажал-держим)
331+
// вторая - два клика, затем удержание
332+
// третья - три клика, затем удержание
333+
// смотри монитор порта
334+
335+
#include <EncButton.h>
336+
EncButton<EB_TICK, 3> btn;
337+
338+
// переменные для изменения
339+
int val_a, val_b, val_c;
340+
341+
// шаги изменения (signed)
342+
int8_t step_a = 1;
343+
int8_t step_b = 5;
344+
int8_t step_c = 10;
345+
346+
void setup() {
347+
Serial.begin(9600);
348+
}
349+
350+
void loop() {
351+
btn.tick();
352+
353+
// передаём количество предварительных кликов
354+
if (btn.step(1)) {
355+
val_a += step_a;
356+
Serial.print("val_a: ");
357+
Serial.println(val_a);
358+
}
359+
if (btn.step(2)) {
360+
val_b += step_b;
361+
Serial.print("val_b: ");
362+
Serial.println(val_b);
363+
}
364+
if (btn.step(3)) {
365+
val_c += step_c;
366+
Serial.print("val_c: ");
367+
Serial.println(val_c);
368+
}
369+
370+
// разворачиваем шаг для изменения в обратную сторону
371+
// передаём количество предварительных кликов
372+
if (btn.releaseStep(1)) step_a = -step_a;
373+
if (btn.releaseStep(2)) step_b = -step_b;
374+
if (btn.releaseStep(3)) step_c = -step_c;
375+
}
376+
```
377+
323378
<a id="versions"></a>
324379
## Версии
325380
- v1.1 - пуллап отдельныи методом
@@ -341,6 +396,7 @@ void loop() {
341396
- v1.14 - добавлена releaseStep(). Отпускание кнопки внесено в дебаунс
342397
- v1.15 - добавлен setPins() для EncButton2
343398
- v1.16 - добавлен режим EB_HALFSTEP_ENC для полушаговых энкодеров
399+
- v1.17 - добавлен step с предварительными кликами
344400

345401
<a id="feedback"></a>
346402
## Баги и обратная связь

examples/stepMode/stepMode.ino

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// используем одну КНОПКУ для удобного изменения трёх переменных
2+
// первая - один клик, затем удержание (нажал-отпустил-нажал-держим)
3+
// вторая - два клика, затем удержание
4+
// третья - три клика, затем удержание
5+
// смотри монитор порта
6+
7+
#include <EncButton.h>
8+
EncButton<EB_TICK, 3> btn;
9+
10+
// переменные для изменения
11+
int val_a, val_b, val_c;
12+
13+
// шаги изменения (signed)
14+
int8_t step_a = 1;
15+
int8_t step_b = 5;
16+
int8_t step_c = 10;
17+
18+
void setup() {
19+
Serial.begin(9600);
20+
}
21+
22+
void loop() {
23+
btn.tick();
24+
25+
// передаём количество предварительных кликов
26+
if (btn.step(1)) {
27+
val_a += step_a;
28+
Serial.print("val_a: ");
29+
Serial.println(val_a);
30+
}
31+
if (btn.step(2)) {
32+
val_b += step_b;
33+
Serial.print("val_b: ");
34+
Serial.println(val_b);
35+
}
36+
if (btn.step(3)) {
37+
val_c += step_c;
38+
Serial.print("val_c: ");
39+
Serial.println(val_c);
40+
}
41+
42+
// разворачиваем шаг для изменения в обратную сторону
43+
// передаём количество предварительных кликов
44+
if (btn.releaseStep(1)) step_a = -step_a;
45+
if (btn.releaseStep(2)) step_b = -step_b;
46+
if (btn.releaseStep(3)) step_c = -step_c;
47+
}

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=1.16
2+
version=1.17
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Light and fast library for button and encoder operation for Arduino

src/EncButton.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
v1.14 - добавлена releaseStep(). Отпускание кнопки внесено в дебаунс
3737
v1.15 - добавлен setPins() для EncButton2
3838
v1.16 - добавлен режим EB_HALFSTEP_ENC для полушаговых энкодеров
39+
v1.17 - добавлен step с предварительными кликами
3940
*/
4041

4142
#ifndef _EncButton_h
@@ -249,21 +250,23 @@ class EncButton {
249250
int16_t counter = 0; // счётчик энкодера
250251

251252
// ======================================= BTN =======================================
253+
bool state() { return _btnState; } // статус кнопки
252254
bool press() { return checkState(8); } // кнопка нажата
253255
bool release() { return checkFlag(10); } // кнопка отпущена
254256
bool click() { return checkState(5); } // клик по кнопке
255257
bool held() { return checkState(6); } // кнопка удержана
256258
bool hold() { return _EB_readFlag(4); } // кнопка удерживается
257-
bool step() { return checkState(7); } // режим импульсного удержания
258-
bool state() { return _btnState; } // статус кнопки
259-
bool releaseStep() {return checkFlag(12);} // кнопка отпущена после импульсного удержания
259+
bool step(uint8_t clk = 0) { return (clicks == clk) ? checkState(7) : 0; } // режим импульсного удержания с предварительным накликиванием
260+
bool releaseStep(uint8_t clk = 0) { return (clicks == clk) ? checkFlag(12) : 0; } // кнопка отпущена после импульсного удержания с предварительным накликиванием
260261

261262
uint8_t clicks = 0; // счётчик кликов
262263
bool hasClicks(uint8_t num) { return (clicks == num && checkFlag(7)) ? 1 : 0; } // имеются клики
263264
uint8_t hasClicks() { return checkFlag(6) ? clicks : 0; } // имеются клики
264265

265266
// ===================================================================================
266267
// =================================== DEPRECATED ====================================
268+
//bool step() { return checkState(7); } // режим импульсного удержания
269+
//bool releaseStep() { return checkFlag(12); } // кнопка отпущена после импульсного удержания
267270
bool isStep() { return step(); }
268271
bool isHold() { return hold(); }
269272
bool isHolded() { return held(); }

src/EncButton2.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,21 +225,23 @@ class EncButton2 {
225225
int16_t counter = 0; // счётчик энкодера
226226

227227
// ======================================= BTN =======================================
228+
bool state() { return _btnState; } // статус кнопки
228229
bool press() { return checkState(8); } // кнопка нажата
229230
bool release() { return checkFlag(10); } // кнопка отпущена
230231
bool click() { return checkState(5); } // клик по кнопке
231232
bool held() { return checkState(6); } // кнопка удержана
232233
bool hold() { return _EB_readFlag(4); } // кнопка удерживается
233-
bool step() { return checkState(7); } // режим импульсного удержания
234-
bool state() { return _btnState; } // статус кнопки
235-
bool releaseStep() {return checkFlag(12);} // кнопка отпущена после импульсного удержания
234+
bool step(uint8_t clk = 0) { return (clicks == clk) ? checkState(7) : 0; } // режим импульсного удержания с предварительным накликиванием
235+
bool releaseStep(uint8_t clk = 0) { return (clicks == clk) ? checkFlag(12) : 0; } // кнопка отпущена после импульсного удержания с предварительным накликиванием
236236

237237
uint8_t clicks = 0; // счётчик кликов
238238
bool hasClicks(uint8_t num) { return (clicks == num && checkFlag(7)) ? 1 : 0; } // имеются клики
239239
uint8_t hasClicks() { return checkFlag(6) ? clicks : 0; } // имеются клики
240240

241241
// ===================================================================================
242242
// =================================== DEPRECATED ====================================
243+
//bool step() { return checkState(7); } // режим импульсного удержания
244+
//bool releaseStep() { return checkFlag(12); } // кнопка отпущена после импульсного удержания
243245
bool isStep() { return step(); }
244246
bool isHold() { return hold(); }
245247
bool isHolded() { return held(); }

0 commit comments

Comments
 (0)