Skip to content

Commit 19e3e6c

Browse files
committed
upd
1 parent 5240105 commit 19e3e6c

File tree

8 files changed

+43
-15
lines changed

8 files changed

+43
-15
lines changed

README.md

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,12 @@ EncButton2<EB_ENC, EB_CALLBACK> enc[количество];
108108
EncButton2<EB_BTN, EB_CALLBACK> enc[количество];
109109
// и так далее
110110
111-
// ПИНЫ НАСТРАИВАЮТСЯ ПРИ ПОМОЩИ setPins(uint8_t mode, uint8_t P1, uint8_t P2, uint8_t P3);
111+
// ПИНЫ НАСТРАИВАЮТСЯ ПРИ ПОМОЩИ setPins(mode, P1, P2, P3);
112+
// mode - INPUT/INPUT_PULLUP (для всех пинов)
113+
// указываем только нужные для выбранного режима пины:
114+
// EB_ENCBTN - A, B, KEY
115+
// EB_ENC - A, B
116+
// EB_BTN - KEY
112117
// см. пример EucButton2_array
113118
```
114119

@@ -125,18 +130,24 @@ void setButtonLevel(bool level); // уровень кнопки: LOW - кно
125130

126131
// ================= TICK ================
127132
// тикер, вызывать как можно чаще или в прерывании
128-
// вернёт отличное от нуля значение, если произошло какое то событие
133+
// вернёт отличное от нуля значение, если произошло какое то событие (см. пример optimisation)
129134
uint8_t tick();
130135

131136
// tick(uint8_t s1 = 0, uint8_t s2 = 0, uint8_t key = 0)
132-
// может принимать виртуальный сигнал при режиме VIRT_:
137+
// может принимать виртуальный сигнал при режиме VIRT_xxx:
133138
// (сигнал кнопки)
134139
// (сигнал энкодера А, сигнал энкодера B)
135140
// (сигнал энкодера А, сигнал энкодера B, сигнал кнопки)
136141

137-
uint8_t tickISR(); // тикер для прерывания при режиме callback. Не вызывает подключенные функции
138-
void checkCallback(); // проверяет и вызывает подключенные функции для режима callback
142+
// Тикер для прерывания в режиме callback. Не вызывает подключенные функции!
143+
// Требует наличие обычного tick() в loop() (см. примеры tickISR и callbackISR)
144+
uint8_t tickISR();
139145

146+
// проверяет и вызывает подключенные функции для режима callback
147+
// Встроено в tick(), но вынесено отдельной функцией для нестандартных сценариев работы
148+
void checkCallback();
149+
150+
// =============== STATUS ================
140151
uint8_t getState(); // получить статус
141152
void resetState(); // сбросить статус
142153

@@ -186,14 +197,17 @@ PRESS_HANDLER
186197
RELEASE_HANDLER
187198

188199
// =============== DEFINES ===============
189-
// дефайны настроек (дефайнить ПЕРЕД ПОДКЛЮЧЕНИЕМ БИБЛИОТЕКИ)
190-
// показаны значения по умолчанию
191-
//#define EB_FAST 30 // таймаут быстрого поворота, мс
192-
//#define EB_DEB 50 // дебаунс кнопки, мс
193-
//#define EB_STEP 500 // период срабатывания степ, мс
194-
//#define EB_CLICK 400 // таймаут накликивания, мс
195-
//#define EB_HOLD 1000 // таймаут удержания кнопки (устанавливает значение по умолчанию), мс
196-
//#define EB_BETTER_ENC // улучшенный алгоритм опроса энкодера. Добавит 16 байт SRAM при подключении библиотеки
200+
// дефайны настроек (дефайнить ПЕРЕД ПОДКЛЮЧЕНИЕМ БИБЛИОТЕКИ), показаны значения по умолчанию
201+
// энк
202+
#define EB_FAST 30 // таймаут быстрого поворота, мс
203+
#define EB_BETTER_ENC // улучшенный алгоритм опроса энкодера. Добавит 16 байт SRAM при подключении библиотеки
204+
#define EB_HALFSTEP_ENC // режим опроса полушагового энкодера (включи если твой энкодер делает два тика за один)
205+
206+
// кнопка
207+
#define EB_DEB 50 // дебаунс кнопки, мс
208+
#define EB_STEP 500 // период срабатывания степ, мс
209+
#define EB_CLICK 400 // таймаут накликивания, мс
210+
#define EB_HOLD 1000 // таймаут удержания кнопки (можно переназначить setHoldTimeout() из программы), мс
197211
```
198212
### Дополнительно EncButton2
199213
```cpp
@@ -202,11 +216,12 @@ void pullUp(); // здесь не реализована!
202216
```
203217

204218
### Особенности
205-
- Библиотека универсальная, но сделана с упором на оптимизацию памяти при работе во всех режимах внутри одного класса
219+
- Библиотека универсальная, но сделана с упором на максимальную оптимизацию памяти при работе во всех режимах внутри одного класса, поэтому используется шаблон и дефайны
206220
- При создании объекта с разным количеством пинов (энкодер, кнопка, энкодер с кнопкой) библиотека будет компилироваться по разному, ненужный код будет вырезан. Это позволяет экономить Flash память.
207221
- То же самое касается режимов работы TICK/CALLBACK, при использовании TICK весь относящийся к CALLBACK код вырезается компилятором
208222
- Два алгоритма опроса энкодера, обычный и точный. Точный использует на 16 байт больше SRAM памяти (на всю библиотеку), но позволяет работать даже с низкокачественными и убитыми энкодерами
209223
- Точный алгоритм активируется добавлением `#define EB_BETTER_ENC` перед подключением библиотеки
224+
- Версия библиотеки *EncButton2.h* хранит номера пинов в классе. Используйте эту версию для создания массива объектов EncButton!
210225

211226
<a id="example"></a>
212227
## Примеры
@@ -325,6 +340,7 @@ void loop() {
325340
- v1.13 - добавлен экспериментальный EncButton2
326341
- v1.14 - добавлена releaseStep(). Отпускание кнопки внесено в дебаунс
327342
- v1.15 - добавлен setPins() для EncButton2
343+
- v1.16 - добавлен режим EB_HALFSTEP_ENC для полушаговых энкодеров
328344

329345
<a id="feedback"></a>
330346
## Баги и обратная связь
File renamed without changes.
File renamed without changes.
File renamed without changes.

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ EB_STEP KEYWORD1
1515
EB_CLICK KEYWORD1
1616

1717
EB_BETTER_ENC KEYWORD1
18+
EB_HALFSTEP_ENC KEYWORD1
1819

1920
#######################################
2021
# Methods and Functions (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=1.15
2+
version=1.16
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 & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
v1.13 - добавлен экспериментальный EncButton2
3636
v1.14 - добавлена releaseStep(). Отпускание кнопки внесено в дебаунс
3737
v1.15 - добавлен setPins() для EncButton2
38+
v1.16 - добавлен режим EB_HALFSTEP_ENC для полушаговых энкодеров
3839
*/
3940

4041
#ifndef _EncButton_h
@@ -299,7 +300,12 @@ class EncButton {
299300
if (_prev != state) {
300301
_ecount += _EB_DIR[state | (_prev << 2)]; // сдвиг внутреннего счётчика
301302
_prev = state;
303+
#ifdef EB_HALFSTEP_ENC // полушаговый энкодер
304+
// спасибо https://github.com/GyverLibs/EncButton/issues/10#issue-1092009489
305+
if ((state == 0x3 || state == 0x0) && _ecount != 0) {
306+
#else // полношаговый
302307
if (state == 0x3 && _ecount != 0) { // защёлкнули позицию
308+
#endif
303309
EBState = (_ecount < 0) ? 1 : 2;
304310
_ecount = 0;
305311
if (_S2 == EB_NO_PIN || _KEY != EB_NO_PIN) { // энкодер с кнопкой

src/EncButton2.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,12 @@ class EncButton2 {
263263
if (_prev != state) {
264264
_ecount += _EB_DIR[state | (_prev << 2)]; // сдвиг внутреннего счётчика
265265
_prev = state;
266+
#ifdef EB_HALFSTEP_ENC // полушаговый энкодер
267+
// спасибо https://github.com/GyverLibs/EncButton/issues/10#issue-1092009489
268+
if ((state == 0x3 || state == 0x0) && _ecount != 0) {
269+
#else // полношаговый
266270
if (state == 0x3 && _ecount != 0) { // защёлкнули позицию
271+
#endif
267272
EBState = (_ecount < 0) ? 1 : 2;
268273
_ecount = 0;
269274
if (_EB_TYPE == EB_ENCBTN || _EB_TYPE == VIRT_ENCBTN) { // энкодер с кнопкой

0 commit comments

Comments
 (0)