Skip to content

Commit 8db2469

Browse files
committed
upd
1 parent f53fedc commit 8db2469

File tree

7 files changed

+59
-42
lines changed

7 files changed

+59
-42
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@
208208
| getSteps | ✔ | ✔ | ✔ | ✔ |
209209
| releaseHold | ✔ | ✔ | ✔ | ✔ |
210210
| releaseStep | ✔ | ✔ | ✔ | ✔ |
211+
| releaseHoldStep | ✔ | ✔ | ✔ | ✔ |
211212
| waiting | ✔ | ✔ | ✔ | ✔ |
212213
| busy | ✔ | ✔ | ✔ | ✔ |
213214
| action | ✔ | ✔ | ✔ | ✔ |
@@ -334,6 +335,10 @@ bool releaseHold(uint8_t clicks);
334335
bool releaseStep();
335336
bool releaseStep(uint8_t clicks);
336337
338+
// кнопка отпущена после удержания или импульсного удержания [событие]
339+
bool releaseHoldStep();
340+
bool releaseHoldStep(uint8_t clicks);
341+
337342
// получить количество кликов
338343
uint8_t getClicks();
339344
@@ -1767,6 +1772,7 @@ void loop() {
17671772
- v3.5.3
17681773
- Добавлено количество кликов в опрос press/release/click/pressing
17691774
- v3.5.5 - коллбэк на базе std::function для ESP
1775+
- v3.5.8 - добавлен метод releaseHoldStep()
17701776
17711777
<a id="feedback"></a>
17721778
## Баги и обратная связь

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ getClicks KEYWORD2
5151
getSteps KEYWORD2
5252
releaseHold KEYWORD2
5353
releaseStep KEYWORD2
54+
releaseHoldStep KEYWORD2
5455
timeout KEYWORD2
5556
waiting KEYWORD2
5657
busy 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=3.5.7
2+
version=3.5.8
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Light and powerful library for button and encoder operation for Arduino

src/core/VirtButton.h

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,35 +76,35 @@ class VirtButton {
7676
public:
7777
// ====================== SET ======================
7878
// установить таймаут удержания, умолч. 600 (макс. 4000 мс)
79-
void setHoldTimeout(const uint16_t& tout) {
79+
void setHoldTimeout(const uint16_t tout) {
8080
#ifndef EB_HOLD_TIME
8181
EB_HOLD_T = tout >> EB_SHIFT;
8282
#endif
8383
}
8484

8585
// установить таймаут импульсного удержания, умолч. 200 (макс. 4000 мс)
86-
void setStepTimeout(const uint16_t& tout) {
86+
void setStepTimeout(const uint16_t tout) {
8787
#ifndef EB_STEP_TIME
8888
EB_STEP_T = tout >> EB_SHIFT;
8989
#endif
9090
}
9191

9292
// установить таймаут ожидания кликов, умолч. 500 (макс. 4000 мс)
93-
void setClickTimeout(const uint16_t& tout) {
93+
void setClickTimeout(const uint16_t tout) {
9494
#ifndef EB_CLICK_TIME
9595
EB_CLICK_T = tout >> EB_SHIFT;
9696
#endif
9797
}
9898

9999
// установить таймаут антидребезга, умолч. 50 (макс. 255 мс)
100-
void setDebTimeout(const uint8_t& tout) {
100+
void setDebTimeout(const uint8_t tout) {
101101
#ifndef EB_DEB_TIME
102102
EB_DEB_T = tout;
103103
#endif
104104
}
105105

106106
// установить уровень кнопки (HIGH - кнопка замыкает VCC, LOW - замыкает GND)
107-
void setBtnLevel(const bool& level) {
107+
void setBtnLevel(const bool level) {
108108
bf.write(EB_INV, !level);
109109
}
110110

@@ -149,7 +149,7 @@ class VirtButton {
149149
}
150150

151151
// кнопка нажата с предварительными кликами [событие]
152-
bool press(const uint8_t& num) {
152+
bool press(const uint8_t num) {
153153
return (clicks == num) && press();
154154
}
155155

@@ -159,7 +159,7 @@ class VirtButton {
159159
}
160160

161161
// кнопка отпущена (в любом случае) с предварительными кликами [событие]
162-
bool release(const uint8_t& num) {
162+
bool release(const uint8_t num) {
163163
return (clicks == num) && release();
164164
}
165165

@@ -169,7 +169,7 @@ class VirtButton {
169169
}
170170

171171
// клик по кнопке (отпущена без удержания) с предварительными кликами [событие]
172-
bool click(const uint8_t& num) {
172+
bool click(const uint8_t num) {
173173
return (clicks == num) && click();
174174
}
175175

@@ -179,7 +179,7 @@ class VirtButton {
179179
}
180180

181181
// кнопка зажата (между press() и release()) с предварительными кликами [состояние]
182-
bool pressing(const uint8_t& num) {
182+
bool pressing(const uint8_t num) {
183183
return (clicks == num) && pressing();
184184
}
185185

@@ -189,7 +189,7 @@ class VirtButton {
189189
}
190190

191191
// кнопка была удержана (больше таймаута) с предварительными кликами [событие]
192-
bool hold(const uint8_t& num) {
192+
bool hold(const uint8_t num) {
193193
return (clicks == num) && hold();
194194
}
195195

@@ -199,7 +199,7 @@ class VirtButton {
199199
}
200200

201201
// кнопка удерживается (больше таймаута) с предварительными кликами [состояние]
202-
bool holding(const uint8_t& num) {
202+
bool holding(const uint8_t num) {
203203
return (clicks == num) && holding();
204204
}
205205

@@ -209,7 +209,7 @@ class VirtButton {
209209
}
210210

211211
// импульсное удержание с предварительными кликами [событие]
212-
bool step(const uint8_t& num) {
212+
bool step(const uint8_t num) {
213213
return (clicks == num) && step();
214214
}
215215

@@ -219,7 +219,7 @@ class VirtButton {
219219
}
220220

221221
// зафиксировано указанное количество кликов [событие]
222-
bool hasClicks(const uint8_t& num) {
222+
bool hasClicks(const uint8_t num) {
223223
return (clicks == num) && hasClicks();
224224
}
225225

@@ -246,7 +246,7 @@ class VirtButton {
246246
}
247247

248248
// кнопка отпущена после удержания с предварительными кликами [событие]
249-
bool releaseHold(const uint8_t& num) {
249+
bool releaseHold(const uint8_t num) {
250250
return clicks == num && bf.eq(EB_CLKS_R | EB_HLD | EB_STP, EB_CLKS_R | EB_HLD);
251251
}
252252

@@ -256,10 +256,20 @@ class VirtButton {
256256
}
257257

258258
// кнопка отпущена после импульсного удержания с предварительными кликами [событие]
259-
bool releaseStep(const uint8_t& num) {
259+
bool releaseStep(const uint8_t num) {
260260
return clicks == num && bf.eq(EB_CLKS_R | EB_STP, EB_CLKS_R | EB_STP);
261261
}
262262

263+
// кнопка отпущена после удержания или импульсного удержания [событие]
264+
bool releaseHoldStep() {
265+
return releaseHold() || releaseStep();
266+
}
267+
268+
// кнопка отпущена после удержания или импульсного удержания с предварительными кликами [событие]
269+
bool releaseHoldStep(const uint8_t num) {
270+
return releaseHold(num) || releaseStep(num);
271+
}
272+
263273
// кнопка ожидает повторных кликов [состояние]
264274
bool waiting() {
265275
return clicks && bf.eq(EB_PRS | EB_REL, 0);
@@ -301,7 +311,7 @@ class VirtButton {
301311

302312
// ====================== TIME ======================
303313
// после взаимодействия с кнопкой (или энкодером EncButton) прошло указанное время, мс [событие]
304-
bool timeout(const uint16_t& tout) {
314+
bool timeout(const uint16_t tout) {
305315
if (bf.read(EB_TOUT) && (uint16_t)((uint16_t)EB_uptime() - tmr) > tout) {
306316
bf.clear(EB_TOUT);
307317
return 1;
@@ -318,7 +328,7 @@ class VirtButton {
318328
}
319329

320330
// кнопка удерживается дольше чем (с начала нажатия), мс [состояние]
321-
bool pressFor(const uint16_t& ms) {
331+
bool pressFor(const uint16_t ms) {
322332
return pressFor() > ms;
323333
}
324334

@@ -337,7 +347,7 @@ class VirtButton {
337347
}
338348

339349
// кнопка удерживается дольше чем (с начала удержания), мс [состояние]
340-
bool holdFor(const uint16_t& ms) {
350+
bool holdFor(const uint16_t ms) {
341351
return holdFor() > ms;
342352
}
343353

@@ -387,7 +397,7 @@ class VirtButton {
387397
}
388398

389399
// обработка кнопки без сброса событий и вызова коллбэка
390-
bool tickRaw(const bool& s) {
400+
bool tickRaw(const bool s) {
391401
return pollBtn(s);
392402
}
393403

src/core/VirtEncButton.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
1414
public:
1515
// ====================== SET ======================
1616
// установить таймаут быстрого поворота, мс
17-
void setFastTimeout(const uint8_t& tout) {
17+
void setFastTimeout(const uint8_t tout) {
1818
#ifndef EB_FAST_TIME
1919
EB_FAST_T = tout;
2020
#endif
@@ -71,7 +71,7 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
7171
// ====================== POLL ======================
7272
// ISR
7373
// обработка в прерывании (только энкодер). Вернёт 0 в покое, 1 или -1 при повороте
74-
int8_t tickISR(const bool& e0, const bool& e1) {
74+
int8_t tickISR(const bool e0, const bool e1) {
7575
return tickISR(e0 | (e1 << 1));
7676
}
7777

@@ -99,12 +99,12 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
9999

100100
// TICK
101101
// обработка энкодера и кнопки
102-
bool tick(const bool& e0, const bool& e1, const bool& btn) {
102+
bool tick(const bool e0, const bool e1, const bool btn) {
103103
return tick(e0 | (e1 << 1), btn);
104104
}
105105

106106
// обработка энкодера и кнопки. state = -1 для пропуска обработки энкодера
107-
bool tick(const int8_t& state, const bool& btn) {
107+
bool tick(const int8_t state, const bool btn) {
108108
clear();
109109
bool f = tickRaw(state, btn);
110110

@@ -115,13 +115,13 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
115115
}
116116

117117
// обработка энкодера (в прерывании) и кнопки
118-
bool tick(const bool& btn) {
118+
bool tick(const bool btn) {
119119
return tick(-1, btn);
120120
}
121121

122122
// RAW
123123
// обработка без сброса событий и вызова коллбэка
124-
bool tickRaw(const bool& e0, const bool& e1, const bool& btn) {
124+
bool tickRaw(const bool e0, const bool e1, const bool btn) {
125125
return tickRaw(e0 | (e1 << 1), btn);
126126
}
127127

@@ -158,7 +158,7 @@ class VirtEncButton : public VirtButton, public VirtEncoder {
158158
}
159159

160160
// обработка без сброса событий и вызова коллбэка (кнопка)
161-
bool tickRaw(const bool& btn) {
161+
bool tickRaw(const bool btn) {
162162
return tickRaw(-1, btn);
163163
}
164164

src/core/VirtEncoder.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,28 @@ class VirtEncoder {
2727
}
2828
// ====================== SET ======================
2929
// инвертировать направление энкодера
30-
void setEncReverse(const bool& rev) {
30+
void setEncReverse(const bool rev) {
3131
if (rev) ef.set(EB_REV);
3232
else ef.clear(EB_REV);
3333
}
3434

3535
// установить тип энкодера (EB_STEP4_LOW, EB_STEP4_HIGH, EB_STEP2, EB_STEP1)
36-
void setEncType(const uint8_t& type) {
36+
void setEncType(const uint8_t type) {
3737
ef.flags = (ef.flags & 0b11111100) | type;
3838
}
3939

4040
// использовать обработку энкодера в прерывании
41-
void setEncISR(const bool& use) {
41+
void setEncISR(const bool use) {
4242
ef.write(EB_EISR, use);
4343
}
4444

4545
// инициализация энкодера
46-
void initEnc(const bool& e0, const bool& e1) {
46+
void initEnc(const bool e0, const bool e1) {
4747
initEnc(e0 | (e1 << 1));
4848
}
4949

5050
// инициализация энкодера совмещённым значением
51-
void initEnc(const int8_t& v) {
51+
void initEnc(const int8_t v) {
5252
prev = v;
5353
}
5454

@@ -71,7 +71,7 @@ class VirtEncoder {
7171
// ====================== POLL ======================
7272
// ISR
7373
// опросить энкодер в прерывании. Вернёт 1 или -1 при вращении, 0 при остановке
74-
int8_t tickISR(const bool& e0, const bool& e1) {
74+
int8_t tickISR(const bool e0, const bool e1) {
7575
return tickISR(e0 | (e1 << 1));
7676
}
7777

@@ -87,7 +87,7 @@ class VirtEncoder {
8787

8888
// TICK
8989
// опросить энкодер. Вернёт 1 или -1 при вращении, 0 при остановке
90-
int8_t tick(const bool& e0, const bool& e1) {
90+
int8_t tick(const bool e0, const bool e1) {
9191
return tick(e0 | (e1 << 1));
9292
}
9393

@@ -106,7 +106,7 @@ class VirtEncoder {
106106

107107
// RAW
108108
// опросить энкодер без сброса события поворота
109-
int8_t tickRaw(const bool& e0, const bool& e1) {
109+
int8_t tickRaw(const bool e0, const bool e1) {
110110
return tickRaw(e0 | (e1 << 1));
111111
}
112112

@@ -132,7 +132,7 @@ class VirtEncoder {
132132

133133
// POLL
134134
// опросить энкодер без установки события поворота (быстрее). Вернёт 1 или -1 при вращении, 0 при остановке
135-
int8_t pollEnc(const bool& e0, const bool& e1) {
135+
int8_t pollEnc(const bool e0, const bool e1) {
136136
return pollEnc(e0 | (e1 << 1));
137137
}
138138

src/core/flags.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ template <typename T>
77
struct Flags {
88
T flags = 0;
99

10-
inline T mask(const T& x) __attribute__((always_inline)) {
10+
inline T mask(const T x) __attribute__((always_inline)) {
1111
return flags & x;
1212
}
13-
inline void set(const T& x) __attribute__((always_inline)) {
13+
inline void set(const T x) __attribute__((always_inline)) {
1414
flags |= x;
1515
}
16-
inline void clear(const T& x) __attribute__((always_inline)) {
16+
inline void clear(const T x) __attribute__((always_inline)) {
1717
flags &= ~x;
1818
}
19-
inline bool read(const T& x) __attribute__((always_inline)) {
19+
inline bool read(const T x) __attribute__((always_inline)) {
2020
return flags & x;
2121
}
22-
inline void write(const T& x, const bool& v) __attribute__((always_inline)) {
22+
inline void write(const T x, const bool v) __attribute__((always_inline)) {
2323
if (v) set(x);
2424
else clear(x);
2525
}
26-
inline bool eq(const T& x, const T& y) __attribute__((always_inline)) {
26+
inline bool eq(const T x, const T y) __attribute__((always_inline)) {
2727
return (flags & x) == y;
2828
}
2929
};

0 commit comments

Comments
 (0)