From 33692fa054f938024ccb3978e49dfdd52ea1fbc1 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 6 Jun 2020 23:20:40 +0200 Subject: [PATCH] Implemented basic debounce --- src/dpad.h | 15 +++++++++++---- src/dpad3wire.h | 18 ++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/dpad.h b/src/dpad.h index 0466ca9..f7358ac 100644 --- a/src/dpad.h +++ b/src/dpad.h @@ -44,6 +44,7 @@ State Helper::read() #ifdef FEATURE_DPAD Helper helper; State lastState; +millis_t debounceUp, debounceDown, debounceConfirm, debounceBack; void init() { @@ -61,27 +62,33 @@ void update() ButtonBack = 3 }; - if (std::get(lastState) != std::get(state)) + constexpr auto debounceTime = 50; + + if (std::get(lastState) != std::get(state) && now-debounceUp > debounceTime) { if (std::get(state)) InputDispatcher::rotate(-1); std::get(lastState) = std::get(state); + debounceUp = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceDown > debounceTime) { if (std::get(state)) InputDispatcher::rotate(1); std::get(lastState) = std::get(state); + debounceDown = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceConfirm > debounceTime) { InputDispatcher::confirmButton(std::get(state)); std::get(lastState) = std::get(state); + debounceConfirm = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceBack > debounceTime) { InputDispatcher::backButton(std::get(state)); std::get(lastState) = std::get(state); + debounceBack = now; } } #endif diff --git a/src/dpad3wire.h b/src/dpad3wire.h index 72fd1b5..e86f950 100644 --- a/src/dpad3wire.h +++ b/src/dpad3wire.h @@ -58,10 +58,12 @@ dpad::State Helper::read() #ifdef FEATURE_DPAD_3WIRESW Helper helper; dpad::State lastState; +millis_t debounceUp, debounceDown, debounceConfirm, debounceBack; void init() { helper.begin(); + debounceUp = debounceDown = debounceConfirm = debounceBack = millis(); } void update() @@ -76,30 +78,34 @@ void update() ButtonBack = 2 }; - if (std::get(lastState) != std::get(state)) + constexpr auto debounceTime = 50; + + if (std::get(lastState) != std::get(state) && now-debounceUp > debounceTime) { if (std::get(state)) InputDispatcher::rotate(-1); std::get(lastState) = std::get(state); + debounceUp = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceDown > debounceTime) { if (std::get(state)) InputDispatcher::rotate(1); std::get(lastState) = std::get(state); + debounceDown = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceConfirm > debounceTime) { InputDispatcher::confirmButton(std::get(state)); std::get(lastState) = std::get(state); + debounceConfirm = now; } - if (std::get(lastState) != std::get(state)) + if (std::get(lastState) != std::get(state) && now-debounceBack > debounceTime) { InputDispatcher::backButton(std::get(state)); std::get(lastState) = std::get(state); + debounceBack = now; } - - lastState = state; } #endif }