From 5e8351bb2107f17515d9d277eed8b75ea057a778 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 09:59:44 +0600 Subject: [PATCH 01/10] Update GyverButton.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена возможность отслеживания удержания кнопки после нескольких нажатий. Например, двойное нажатие кнопки с удержанием на втором нажатии, в этом случае isHolded(2) будет Истина. Сохранена возможность простого отслеживания удержания кнопки (isHolded()) - в этом случае не имеет значения количество нажатий до удержания. --- GyverButton/GyverButton.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/GyverButton/GyverButton.cpp b/GyverButton/GyverButton.cpp index 43816b9..0f2c8db 100644 --- a/GyverButton/GyverButton.cpp +++ b/GyverButton/GyverButton.cpp @@ -69,13 +69,14 @@ boolean GButton::isClick() { return true; } else return false; } -boolean GButton::isHolded() { +boolean GButton::isHolded(byte cnt) { if (flags.tickMode) GButton::tick(); - if (flags.isHolded_f) { - flags.isHolded_f = false; + if (flags.isHolded_f == cnt || cnt == 255) { + flags.isHolded_f = 0; return true; } else return false; } + boolean GButton::isHold() { if (flags.tickMode) GButton::tick(); if (flags.step_flag) return true; @@ -167,9 +168,9 @@ void GButton::tick() { // кнопка удерживается if (flags.btn_flag && flags.btn_state && (millis() - btn_timer >= _timeout) && !flags.hold_flag) { flags.hold_flag = true; + flags.isHolded_f = btn_counter + 1; btn_counter = 0; last_counter = 0; - flags.isHolded_f = true; flags.step_flag = true; flags.oneClick_f = false; btn_timer = millis(); @@ -181,4 +182,4 @@ void GButton::tick() { btn_counter = 0; flags.counter_flag = true; } -} \ No newline at end of file +} From 616533a14f2cdd380853019af5d2ec8c70f06fae Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 10:01:29 +0600 Subject: [PATCH 02/10] Update GyverButton.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit см. комментарий GyverButton.cpp --- GyverButton/GyverButton.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/GyverButton/GyverButton.h b/GyverButton/GyverButton.h index 2a39eba..7f08be5 100644 --- a/GyverButton/GyverButton.h +++ b/GyverButton/GyverButton.h @@ -28,7 +28,7 @@ typedef struct bool btn_flag: 1; bool hold_flag: 1; bool counter_flag: 1; - bool isHolded_f: 1; + uint8_t isHolded_f: 5; bool isRelease_f: 1; bool isPress_f: 1; bool step_flag: 1; @@ -62,6 +62,7 @@ class GButton void setTickMode(boolean tickMode); // (MANUAL / AUTO) ручной или автоматический опрос кнопки функцией tick() // MANUAL - нужно вызывать функцию tick() вручную // AUTO - tick() входит во все остальные функции и опрашивается сама + void tick(); // опрос кнопки void tick(boolean state); // опрос внешнего значения (0 нажато, 1 не нажато) (для матричных, резистивных клавиатур и джойстиков) @@ -69,7 +70,7 @@ class GButton boolean isPress(); // возвращает true при нажатии на кнопку. Сбрасывается после вызова boolean isRelease(); // возвращает true при отпускании кнопки. Сбрасывается после вызова boolean isClick(); // возвращает true при клике. Сбрасывается после вызова - boolean isHolded(); // возвращает true при удержании дольше timeout. Сбрасывается после вызова + boolean isHolded(byte cnt = 255); // возвращает true если количество нажатий перед ужержанием было равно cnt и удержание дольше timeout. Сбрасывается после вызова boolean isHold(); // возвращает true при нажатой кнопке, не сбрасывается boolean state(); // возвращает состояние кнопки @@ -101,4 +102,4 @@ class GButton #define MANUAL 0 #define AUTO 1 -#endif \ No newline at end of file +#endif From 4f75aead6c294550120ccd1778d76679e9a4d849 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 13:57:15 +0600 Subject: [PATCH 03/10] Update GyverButton.h --- GyverButton/GyverButton.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GyverButton/GyverButton.h b/GyverButton/GyverButton.h index 7f08be5..a55a075 100644 --- a/GyverButton/GyverButton.h +++ b/GyverButton/GyverButton.h @@ -28,7 +28,7 @@ typedef struct bool btn_flag: 1; bool hold_flag: 1; bool counter_flag: 1; - uint8_t isHolded_f: 5; + uint8_t isHolded_f: 4; bool isRelease_f: 1; bool isPress_f: 1; bool step_flag: 1; From 98cedd47b0123a7dd6a5d03b1946dcdf9c691ed7 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 13:57:55 +0600 Subject: [PATCH 04/10] Update GyverButton.cpp --- GyverButton/GyverButton.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GyverButton/GyverButton.cpp b/GyverButton/GyverButton.cpp index 0f2c8db..2ffd62f 100644 --- a/GyverButton/GyverButton.cpp +++ b/GyverButton/GyverButton.cpp @@ -71,7 +71,7 @@ boolean GButton::isClick() { } boolean GButton::isHolded(byte cnt) { if (flags.tickMode) GButton::tick(); - if (flags.isHolded_f == cnt || cnt == 255) { + if (flags.isHolded_f == cnt || cnt == 15) { flags.isHolded_f = 0; return true; } else return false; From 5cb5c3a948a89f3b71de0debe3092bf3fd8cc94c Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 13:58:48 +0600 Subject: [PATCH 05/10] Update GyverButton.h --- GyverButton/GyverButton.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GyverButton/GyverButton.h b/GyverButton/GyverButton.h index a55a075..b7c6566 100644 --- a/GyverButton/GyverButton.h +++ b/GyverButton/GyverButton.h @@ -28,7 +28,7 @@ typedef struct bool btn_flag: 1; bool hold_flag: 1; bool counter_flag: 1; - uint8_t isHolded_f: 4; + uint8_t isHolded_f: 8; bool isRelease_f: 1; bool isPress_f: 1; bool step_flag: 1; @@ -70,7 +70,7 @@ class GButton boolean isPress(); // возвращает true при нажатии на кнопку. Сбрасывается после вызова boolean isRelease(); // возвращает true при отпускании кнопки. Сбрасывается после вызова boolean isClick(); // возвращает true при клике. Сбрасывается после вызова - boolean isHolded(byte cnt = 255); // возвращает true если количество нажатий перед ужержанием было равно cnt и удержание дольше timeout. Сбрасывается после вызова + boolean isHolded(byte cnt = 255); // возвращает true если количество нажатий перед ужержанием было равно cnt и удержание дольше timeout. Сбрасывается после вызова boolean isHold(); // возвращает true при нажатой кнопке, не сбрасывается boolean state(); // возвращает состояние кнопки From 51cfd5451e5c61f6e5e28ca7c92b0a80ceb3d8b3 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 13:59:14 +0600 Subject: [PATCH 06/10] Update GyverButton.cpp --- GyverButton/GyverButton.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GyverButton/GyverButton.cpp b/GyverButton/GyverButton.cpp index 2ffd62f..0f2c8db 100644 --- a/GyverButton/GyverButton.cpp +++ b/GyverButton/GyverButton.cpp @@ -71,7 +71,7 @@ boolean GButton::isClick() { } boolean GButton::isHolded(byte cnt) { if (flags.tickMode) GButton::tick(); - if (flags.isHolded_f == cnt || cnt == 15) { + if (flags.isHolded_f == cnt || cnt == 255) { flags.isHolded_f = 0; return true; } else return false; From 0ec740d1573dcd01809375db00a85936e2293adb Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 14:10:59 +0600 Subject: [PATCH 07/10] Update GyverButton.h --- GyverButton/GyverButton.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GyverButton/GyverButton.h b/GyverButton/GyverButton.h index b7c6566..9c8bfbf 100644 --- a/GyverButton/GyverButton.h +++ b/GyverButton/GyverButton.h @@ -28,7 +28,6 @@ typedef struct bool btn_flag: 1; bool hold_flag: 1; bool counter_flag: 1; - uint8_t isHolded_f: 8; bool isRelease_f: 1; bool isPress_f: 1; bool step_flag: 1; @@ -38,6 +37,7 @@ typedef struct bool mode: 1; bool type: 1; bool tickMode: 1; + uint8_t isHolded_f: 8; } GyverButtonFlags; #pragma pack(pop) From a0f74723b72334edb111724b82ee4cdc272e2aaf Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 14:29:23 +0600 Subject: [PATCH 08/10] Update GyverButton.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена возможность отслеживания удержания кнопки после нескольких заранее определенных нажатий. Например, двойное нажатие кнопки с удержанием на втором нажатии (третьем, четвертом...), в этом случае "isHolded(2)" ("isHolded(3)", "isHolded(4)"...) будет Истина. Сохранена обратная совместимость - возможность простого отслеживания удержания кнопки "isHolded()" - в этом случае не имеет значения количество нажатий до удержания. From 97706847398c62bf94d9948b535e883291c22314 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 14:30:09 +0600 Subject: [PATCH 09/10] Update GyverButton.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена возможность отслеживания удержания кнопки после нескольких заранее определенных нажатий. Например, двойное нажатие кнопки с удержанием на втором нажатии (третьем, четвертом...), в этом случае "isHolded(2)" ("isHolded(3)", "isHolded(4)"...) будет Истина. Сохранена обратная совместимость - возможность простого отслеживания удержания кнопки "isHolded()" - в этом случае не имеет значения количество нажатий до удержания. From 4ed8fc0ae68891527fe028c05e239bdfd35437c3 Mon Sep 17 00:00:00 2001 From: Norovl <48591036+Norovl@users.noreply.github.com> Date: Thu, 29 Aug 2019 18:28:55 +0600 Subject: [PATCH 10/10] Update GyverButton.cpp --- GyverButton/GyverButton.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GyverButton/GyverButton.cpp b/GyverButton/GyverButton.cpp index 0f2c8db..1ab9dab 100644 --- a/GyverButton/GyverButton.cpp +++ b/GyverButton/GyverButton.cpp @@ -71,7 +71,7 @@ boolean GButton::isClick() { } boolean GButton::isHolded(byte cnt) { if (flags.tickMode) GButton::tick(); - if (flags.isHolded_f == cnt || cnt == 255) { + if (flags.isHolded_f == cnt || flags.isHolded_f != 0 && cnt == 255) { flags.isHolded_f = 0; return true; } else return false;