Skip to content

Commit 10c92fd

Browse files
committed
upd
1 parent a8869ab commit 10c92fd

File tree

8 files changed

+134
-7
lines changed

8 files changed

+134
-7
lines changed

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[![Foo](https://img.shields.io/badge/Version-1.19.2-brightgreen.svg?style=flat-square)](#versions)
1+
[![Foo](https://img.shields.io/badge/Version-1.19.3-brightgreen.svg?style=flat-square)](#versions)
22
[![Foo](https://img.shields.io/badge/Website-AlexGyver.ru-blue.svg?style=flat-square)](https://alexgyver.ru/)
33
[![Foo](https://img.shields.io/badge/%E2%82%BD$%E2%82%AC%20%D0%9D%D0%B0%20%D0%BF%D0%B8%D0%B2%D0%BE-%D1%81%20%D1%80%D1%8B%D0%B1%D0%BA%D0%BE%D0%B9-orange.svg?style=flat-square)](https://alexgyver.ru/support_alex/)
44

@@ -334,10 +334,12 @@ void detachClicks(); // отключить обработ
334334
335335
### Виртуальный режим
336336
Виртуальный режим позволяет получить все возможности библиотеки EncButton в ситуациях, когда кнопка не подключена напрямую к микроконтроллеру, либо для её опроса используется другая библиотека:
337-
- Аналоговая клавиатура (например через библиотеку [AnalogKey](https://github.com/GyverLibs/AnalogKey))
338-
- Матричная клавиатура (например через библиотеку [SimpleKeypad](https://github.com/maximebohrer/SimpleKeypad))
337+
- Аналоговая клавиатура (например через библиотеку [AnalogKey](https://github.com/GyverLibs/AnalogKey)). Смотри пример *virtual_AnalogKey*
338+
- Матричная клавиатура (например через библиотеку [SimpleKeypad](https://github.com/maximebohrer/SimpleKeypad)). Смотри пример *virtual_SimpleKeypad* и *virtual_SimpleKeypad_array*
339339
- Кнопки или энкодеры, подключенные через расширители пинов или сдвиговые регистры
340340
341+
Таким образом можно получить несколько нажатий с матричной клавиатуры, удержание кнопок матричной клавиатуры, импульсное удержание и прочие фишки EncButton.
342+
341343
Для работы нужно передать в `tick()` текущие состояния "пинов" кнопки/энкодера: `tick(s1, s2, s3)` в следующем порядке
342344
- Кнопка - (сигнал кнопки)
343345
- Энкодер - (сигнал энкодера А, сигнал энкодера B)
@@ -527,6 +529,7 @@ void loop() {
527529
- v1.19 - оптимизация скорости, уменьшен вес в sram
528530
- v1.19.1 - ещё чутка увеличена производительность
529531
- v1.19.2 - ещё немного увеличена производительность, спасибо XRay3D
532+
- v1.19.3 - сделал высокий уровень кнопки по умолчанию в виртуальном режиме
530533

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

examples/virtual/virtual.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ void loop() {
1515
// (сигнал кнопки)
1616
// (сигнал энкодера А, сигнал энкодера B)
1717
// (сигнал энкодера А, сигнал энкодера B, сигнал кнопки)
18-
enc.tick(digitalRead(4));
18+
enc.tick(!digitalRead(4));
1919

2020
if (enc.press()) Serial.println("press");
2121
if (enc.click()) Serial.println("click");
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// пример работы в виртуальном режиме совместно с библиотекой AnalogKey
2+
// https://github.com/GyverLibs/AnalogKey
3+
4+
#include <EncButton.h>
5+
EncButton<EB_TICK, VIRT_BTN> btn0;
6+
EncButton<EB_TICK, VIRT_BTN> btn1;
7+
8+
#include <AnalogKey.h>
9+
// создаём массив значений сигналов с кнопок
10+
int16_t sigs[16] = {
11+
1023, 927, 856, 783,
12+
671, 632, 590, 560,
13+
504, 480, 455, 440,
14+
399, 319, 255, 230
15+
};
16+
17+
// указываем пин, количество кнопок и массив значений
18+
AnalogKey<A0, 16, sigs> keys;
19+
20+
21+
void setup() {
22+
Serial.begin(9600);
23+
}
24+
25+
void loop() {
26+
btn0.tick(keys.status(0));
27+
btn1.tick(keys.status(1));
28+
29+
// забираем действия с кнопок
30+
if (btn0.click()) Serial.println("click 0");
31+
if (btn0.held()) Serial.println("held 0");
32+
33+
if (btn1.press()) Serial.println("press 1");
34+
if (btn1.step()) Serial.println("step 1");
35+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// пример работы в виртуальном режиме совместно с библиотекой SimpleKeypad
2+
// https://github.com/maximebohrer/SimpleKeypad
3+
4+
#include <EncButton.h>
5+
EncButton<EB_TICK, VIRT_BTN> btn0;
6+
EncButton<EB_TICK, VIRT_BTN> btn1;
7+
8+
// пины подключения (по порядку штекера)
9+
byte colPins[] = {7, 6, 5, 4};
10+
byte rowPins[] = {11, 10, 9, 8};
11+
12+
// массив имён кнопок
13+
char keys[4][4] = {
14+
{'1', '2', '3', 'A'},
15+
{'4', '5', '6', 'B'},
16+
{'7', '8', '9', 'C'},
17+
{'*', '0', '#', 'D'}
18+
};
19+
20+
#include <SimpleKeypad.h>
21+
SimpleKeypad pad((char*)keys, rowPins, colPins, 4, 4);
22+
23+
void setup() {
24+
Serial.begin(9600);
25+
}
26+
27+
void loop() {
28+
// тикаем все кнопки, передавая сравнение с кодом кнопки в цикле
29+
// делаем это по таймеру, чтобы не опрашивать клавиатуру постоянно
30+
static uint32_t tmr;
31+
if (millis() - tmr >= 10) {
32+
tmr = millis();
33+
char key = pad.scan();
34+
btn0.tick(key == '1');
35+
btn1.tick(key == '2');
36+
}
37+
38+
// забираем действия с кнопок
39+
if (btn0.click()) Serial.println("click 0");
40+
if (btn0.held()) Serial.println("held 0");
41+
42+
if (btn1.press()) Serial.println("press 1");
43+
if (btn1.step()) Serial.println("step 1");
44+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// пример работы в виртуальном режиме совместно с библиотекой SimpleKeypad
2+
// https://github.com/maximebohrer/SimpleKeypad
3+
// передаём EncButton сразу всю клавиатуру через массивы и циклы
4+
5+
#include <EncButton.h>
6+
EncButton<EB_TICK, VIRT_BTN> btn[16];
7+
8+
// пины подключения (по порядку штекера)
9+
byte colPins[] = {7, 6, 5, 4};
10+
byte rowPins[] = {11, 10, 9, 8};
11+
12+
// массив имён кнопок
13+
char keys[4][4] = {
14+
{'1', '2', '3', 'A'},
15+
{'4', '5', '6', 'B'},
16+
{'7', '8', '9', 'C'},
17+
{'*', '0', '#', 'D'}
18+
};
19+
20+
#include <SimpleKeypad.h>
21+
SimpleKeypad pad((char*)keys, rowPins, colPins, 4, 4);
22+
23+
void setup() {
24+
Serial.begin(9600);
25+
}
26+
27+
void loop() {
28+
// массово тикаем все кнопки, передавая сравнение с кодом кнопки в цикле
29+
// делаем это по таймеру, чтобы не опрашивать клавиатуру постоянно
30+
static uint32_t tmr;
31+
if (millis() - tmr >= 10) {
32+
tmr = millis();
33+
char key = pad.scan();
34+
char* keysPtr = (char*)keys; // указатель для удобства опроса
35+
for (int i = 0; i < 16; i++) btn[i].tick(key == keysPtr[i]);
36+
}
37+
38+
// забираем действия с кнопок
39+
if (btn[0].click()) Serial.println("click 0");
40+
if (btn[0].held()) Serial.println("held 0");
41+
42+
if (btn[1].press()) Serial.println("press 1");
43+
if (btn[1].step()) Serial.println("step 1");
44+
}

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.19.2
2+
version=1.19.3
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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
v1.19 - оптимизация скорости, уменьшен вес в sram
4444
v1.19.1 - ещё чутка увеличена производительность
4545
v1.19.2 - ещё немного увеличена производительность, спасибо XRay3D
46+
v1.19.3 - сделал высокий уровень кнопки по умолчанию в виртуальном режиме
4647
*/
4748

4849
#ifndef _EncButton_h
@@ -122,7 +123,7 @@ class EncButton {
122123
// можно указать режим работы пина
123124
EncButton(const uint8_t mode = INPUT_PULLUP) {
124125
if (_S1 < 252 && mode == INPUT_PULLUP) pullUp();
125-
setButtonLevel(LOW);
126+
setButtonLevel(_S1 < 252 ? LOW : HIGH); // высокий уровень в виртуальном режиме
126127
}
127128

128129
// подтянуть пины внутренней подтяжкой

src/EncButton2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class EncButton2 {
7777
public:
7878
// pinMode, pin1, pin2, pin3
7979
EncButton2(uint8_t mode = INPUT, uint8_t P1 = 255, uint8_t P2 = 255, uint8_t P3 = 255) {
80-
setButtonLevel(LOW);
80+
setButtonLevel(_S1 < 252 ? LOW : HIGH); // высокий уровень в виртуальном режиме
8181
setPins(mode, P1, P2, P3);
8282
}
8383

0 commit comments

Comments
 (0)