Skip to content

Commit aff09ad

Browse files
committed
upd
1 parent 3d346a6 commit aff09ad

File tree

10 files changed

+100
-43
lines changed

10 files changed

+100
-43
lines changed

README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
- [Одновременное нажатие](#double)
6060
- [Прерывания](#isr)
6161
- [Массив кнопок/энкодеров](#array)
62+
- [Кастомные функции](#custom)
6263
- [Мини примеры, сценарии](#examples-mini)
6364
- [Миграция с v2](#migrate)
6465
- [Примеры](#example)
@@ -67,6 +68,7 @@
6768

6869
<a id="install"></a>
6970
## Установка
71+
- Для работы требуется библиотека [GyverIO](https://github.com/GyverLibs/GyverIO)
7072
- Библиотеку можно найти по названию **EncButton** и установить через менеджер библиотек в:
7173
- Arduino IDE
7274
- Arduino IDE v2
@@ -125,6 +127,9 @@
125127
Объявлять до подключения библиотеки
126128

127129
```cpp
130+
// отключить привязку к библиотеке GyverIO и использовать стандартный digitalRead
131+
#define EB_NO_GYVER_IO
132+
128133
// отключить поддержку pressFor/holdFor/stepFor и счётчик степов (экономит 2 байта оперативки)
129134
#define EB_NO_FOR
130135

@@ -137,6 +142,10 @@
137142
// отключить буферизацию энкодера (экономит 2 байта оперативки)
138143
#define EB_NO_BUFFER
139144

145+
// кастомные функции
146+
#define EB_CUSTOM_READ // использовать своё чтение пина
147+
#define EB_CUSTOM_UPTIME // использовать свой таймер
148+
140149
/*
141150
Настройка таймаутов для всех классов
142151
- Заменяет таймауты константами, изменить их из программы (SetXxxTimeout()) будет нельзя
@@ -1201,6 +1210,34 @@ void loop() {
12011210
}
12021211
```
12031212

1213+
<a id="custom"></a>
1214+
1215+
### Кастомные функции
1216+
Библиотека поддерживает задание своих функций для чтения пина и получения времени без редактирования файлов библиотеки. Для этого нужно:
1217+
- Объявить соответствующий дефайн перед подключением библиотеки
1218+
- `EB_CUSTOM_READ` - для своей функции чтения пина
1219+
- `EB_CUSTOM_UPTIME` - для своего аналога millis()
1220+
- Реализовать соответствующую функцию в .cpp или .ino файле
1221+
- `EB_read` - для своей функции чтения пина
1222+
- `EB_uptime` - для своего аналога millis()
1223+
1224+
Пример:
1225+
1226+
```cpp
1227+
#define EB_CUSTOM_READ
1228+
#define EB_CUSTOM_UPTIME
1229+
1230+
#include <EncButton.h>
1231+
1232+
bool EB_read(const uint8_t pin) {
1233+
return digitalRead(pin);
1234+
}
1235+
1236+
uint32_t EB_uptime() {
1237+
return millis();
1238+
}
1239+
```
1240+
12041241
<a id="examples-mini"></a>
12051242
12061243
### Мини примеры, сценарии
@@ -1653,6 +1690,9 @@ void loop() {
16531690
- v3.4
16541691
- Доступ к счётчику кликов во время нажатого поворота
16551692
- Добавлена функция detach()
1693+
- v3.5
1694+
- Добавлена зависимость GyverIO (ускорен опрос пинов)
1695+
- Добавлена возможность задать свои функции аптайма и чтения пина
16561696
16571697
<a id="feedback"></a>
16581698
## Баги и обратная связь

keywords.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,17 @@ EB_HOLD_TIME KEYWORD1
2424
EB_STEP_TIME KEYWORD1
2525
EB_FAST_TIME KEYWORD1
2626

27+
EB_NO_GYVER_IO KEYWORD1
28+
EB_CUSTOM_READ KEYWORD1
29+
EB_CUSTOM_UPTIME KEYWORD1
30+
2731
#######################################
2832
# Methods and Functions (KEYWORD2)
2933
#######################################
34+
35+
EB_read KEYWORD2
36+
EB_uptime KEYWORD2
37+
3038
setHoldTimeout KEYWORD2
3139
setStepTimeout KEYWORD2
3240
setClickTimeout KEYWORD2

library.properties

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name=EncButton
2-
version=3.4
2+
version=3.5.0
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=*
10+
depends=GyverIO

src/core/Button.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ class Button : public VirtButton {
2020

2121
// прочитать текущее значение кнопки (без дебаунса)
2222
bool read() {
23-
return EBread(pin) ^ read_bf(EB_INV);
23+
return EB_read(pin) ^ read_bf(EB_INV);
2424
}
2525

2626
// функция обработки, вызывать в loop
2727
bool tick() {
28-
return VirtButton::tick(EBread(pin));
28+
return VirtButton::tick(EB_read(pin));
2929
}
3030

3131
// обработка кнопки без сброса событий и вызова коллбэка
3232
bool tickRaw() {
33-
return VirtButton::tickRaw(EBread(pin));
33+
return VirtButton::tickRaw(EB_read(pin));
3434
}
3535

3636
private:
@@ -53,17 +53,17 @@ class ButtonT : public VirtButton {
5353

5454
// прочитать текущее значение кнопки (без дебаунса)
5555
bool read() {
56-
return EBread(PIN) ^ read_bf(EB_INV);
56+
return EB_read(PIN) ^ read_bf(EB_INV);
5757
}
5858

5959
// функция обработки, вызывать в loop
6060
bool tick() {
61-
return VirtButton::tick(EBread(PIN));
61+
return VirtButton::tick(EB_read(PIN));
6262
}
6363

6464
// обработка кнопки без сброса событий и вызова коллбэка
6565
bool tickRaw() {
66-
return VirtButton::tickRaw(EBread(PIN));
66+
return VirtButton::tickRaw(EB_read(PIN));
6767
}
6868

6969
private:

src/core/EncButton.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,25 @@ class EncButton : public VirtEncButton {
3232

3333
// функция обработки, вызывать в loop
3434
bool tick() {
35-
if (read_ef(EB_EISR)) return VirtEncButton::tick(EBread(b));
36-
else return VirtEncButton::tick(readEnc(), EBread(b));
35+
if (read_ef(EB_EISR)) return VirtEncButton::tick(EB_read(b));
36+
else return VirtEncButton::tick(readEnc(), EB_read(b));
3737
}
3838

3939
// функция обработки без сброса событий
4040
bool tickRaw() {
41-
if (read_ef(EB_EISR)) return VirtEncButton::tickRaw(EBread(b));
42-
else return VirtEncButton::tickRaw(readEnc(), EBread(b));
41+
if (read_ef(EB_EISR)) return VirtEncButton::tickRaw(EB_read(b));
42+
else return VirtEncButton::tickRaw(readEnc(), EB_read(b));
4343
}
4444

4545
// ====================== READ ======================
4646
// прочитать значение кнопки
4747
bool readBtn() {
48-
return EBread(b) ^ read_bf(EB_INV);
48+
return EB_read(b) ^ read_bf(EB_INV);
4949
}
5050

5151
// прочитать значение энкодера
5252
int8_t readEnc() {
53-
return EBread(e0) | (EBread(e1) << 1);
53+
return EB_read(e0) | (EB_read(e1) << 1);
5454
}
5555

5656
// ===================== PRIVATE =====================
@@ -84,25 +84,25 @@ class EncButtonT : public VirtEncButton {
8484

8585
// функция обработки, вызывать в loop
8686
bool tick() {
87-
if (read_ef(EB_EISR)) return VirtEncButton::tick(EBread(BTN));
88-
else return VirtEncButton::tick(readEnc(), EBread(BTN));
87+
if (read_ef(EB_EISR)) return VirtEncButton::tick(EB_read(BTN));
88+
else return VirtEncButton::tick(readEnc(), EB_read(BTN));
8989
}
9090

9191
// функция обработки без сброса событий
9292
bool tickRaw() {
93-
if (read_ef(EB_EISR)) return VirtEncButton::tickRaw(EBread(BTN));
94-
else return VirtEncButton::tickRaw(readEnc(), EBread(BTN));
93+
if (read_ef(EB_EISR)) return VirtEncButton::tickRaw(EB_read(BTN));
94+
else return VirtEncButton::tickRaw(readEnc(), EB_read(BTN));
9595
}
9696

9797
// ====================== READ ======================
9898
// прочитать значение кнопки
9999
bool readBtn() {
100-
return EBread(BTN) ^ read_bf(EB_INV);
100+
return EB_read(BTN) ^ read_bf(EB_INV);
101101
}
102102

103103
// прочитать значение энкодера
104104
int8_t readEnc() {
105-
return EBread(ENCA) | (EBread(ENCB) << 1);
105+
return EB_read(ENCA) | (EB_read(ENCB) << 1);
106106
}
107107

108108
// ===================== PRIVATE =====================

src/core/Encoder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Encoder : public VirtEncoder {
4343

4444
// прочитать значение энкодера
4545
int8_t readEnc() {
46-
return EBread(e0) | (EBread(e1) << 1);
46+
return EB_read(e0) | (EB_read(e1) << 1);
4747
}
4848
};
4949

@@ -82,7 +82,7 @@ class EncoderT : public VirtEncoder {
8282

8383
// прочитать значение энкодера
8484
int8_t readEnc() {
85-
return EBread(ENCA) | (EBread(ENCB) << 1);
85+
return EB_read(ENCA) | (EB_read(ENCB) << 1);
8686
}
8787

8888
private:

src/core/VirtButton.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class VirtButton {
101101

102102
// кнопка нажата в прерывании (не учитывает btnLevel!)
103103
void pressISR() {
104-
if (!read_bf(EB_DEB)) tmr = EB_UPTIME();
104+
if (!read_bf(EB_DEB)) tmr = EB_uptime();
105105
set_bf(EB_DEB | EB_BISR);
106106
}
107107

@@ -273,7 +273,7 @@ class VirtButton {
273273
// ====================== TIME ======================
274274
// после взаимодействия с кнопкой (или энкодером EncButton) прошло указанное время, мс [событие]
275275
bool timeout(uint16_t tout) {
276-
if (read_bf(EB_TOUT) && (uint16_t)((uint16_t)EB_UPTIME() - tmr) > tout) {
276+
if (read_bf(EB_TOUT) && (uint16_t)((uint16_t)EB_uptime() - tmr) > tout) {
277277
clr_bf(EB_TOUT);
278278
return 1;
279279
}
@@ -283,7 +283,7 @@ class VirtButton {
283283
// время, которое кнопка удерживается (с начала нажатия), мс
284284
uint16_t pressFor() {
285285
#ifndef EB_NO_FOR
286-
if (ftmr) return (uint16_t)EB_UPTIME() - ftmr;
286+
if (ftmr) return (uint16_t)EB_uptime() - ftmr;
287287
#endif
288288
return 0;
289289
}
@@ -382,7 +382,7 @@ class VirtButton {
382382
else return 0;
383383
}
384384

385-
uint16_t ms = EB_UPTIME();
385+
uint16_t ms = EB_uptime();
386386
uint16_t deb = ms - tmr;
387387

388388
if (s) { // кнопка нажата

src/core/VirtEncButton.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
174174

175175
private:
176176
bool checkFast() {
177-
uint16_t ms = EB_UPTIME();
177+
uint16_t ms = EB_uptime();
178178
bool f = 0;
179179
if (ms - tmr < EB_FAST_T) f = 1;
180180
tmr = ms;

src/core/utils.cpp

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/core/utils.h

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
1+
#pragma once
12
#include <Arduino.h>
23

3-
#define EB_UPTIME() millis()
4+
#if !defined(EB_NO_GYVER_IO) && !defined(EB_CUSTOM_READ)
5+
#include <GyverIO.h>
6+
#endif
47

5-
bool EBread(const uint8_t pin);
8+
bool EB_read(const uint8_t pin);
9+
uint32_t EB_uptime();
10+
11+
// ====================
12+
13+
#ifndef EB_CUSTOM_READ
14+
bool EB_read(const uint8_t pin) {
15+
#ifndef EB_NO_GYVER_IO
16+
return gio::read(pin);
17+
#else
18+
return digitalRead(pin);
19+
#endif
20+
}
21+
#endif
22+
23+
#ifndef EB_CUSTOM_UPTIME
24+
uint32_t EB_uptime() {
25+
return millis();
26+
}
27+
#endif

0 commit comments

Comments
 (0)