From 2f7a1e89aa19dac7903e743e60b275a54a0230cf Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Sun, 8 Oct 2023 19:15:49 -0700 Subject: [PATCH] client: debounce --- client/config.c | 4 ++++ client/config.h | 4 ++++ client/tattlekey.c | 14 ++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/client/config.c b/client/config.c index a8e5844..c5a38b4 100644 --- a/client/config.c +++ b/client/config.c @@ -17,3 +17,7 @@ u16_t this_tattler_identity = 1; * https://projects.raspberrypi.org/en/projects/introduction-to-the-pico/10 * recommends pins 18, 22, or 28. */ uint button_pin = 18; + +/* Don't bother reporting each separate button press when it is pressed many + * times in short succession. (We also use this to de-bounce. :) */ +u32_t minimum_microseconds_between_button_presses = 1000000; diff --git a/client/config.h b/client/config.h index 95c5651..5ce0baf 100644 --- a/client/config.h +++ b/client/config.h @@ -21,4 +21,8 @@ extern u16_t this_tattler_identity; * recommends pins 18, 22, or 28. */ extern uint button_pin; +/* Don't bother reporting each separate button press when it is pressed many + * times in short succession. (We also use this to de-bounce. :) */ +extern u32_t minimum_microseconds_between_button_presses; + #endif diff --git a/client/tattlekey.c b/client/tattlekey.c index 45059f6..ff61f43 100644 --- a/client/tattlekey.c +++ b/client/tattlekey.c @@ -11,10 +11,16 @@ queue_t queue; static void button_pressed() { /* This runs in interrupt context; don't linger. */ - char zero = '\0'; - /* We don't check for failure (full queue) here because there's not much to be - * done about it. */ - queue_try_add(&queue, &zero); + static uint64_t last_button_press_time = 0; + uint64_t now = time_us_64(); + uint64_t time_since_last_press = now - last_button_press_time; + if (time_since_last_press > minimum_microseconds_between_button_presses) { + last_button_press_time = now; + char zero = '\0'; + /* We don't check for failure (full queue) here because there's not much to + * be done about it. */ + queue_try_add(&queue, &zero); + } } int main() { -- 2.44.1