From: Scott Worley Date: Mon, 9 Oct 2023 02:15:49 +0000 (-0700) Subject: client: debounce X-Git-Tag: v0.1.0~56 X-Git-Url: http://git.scottworley.com/tattlekey/commitdiff_plain/2f7a1e89aa19dac7903e743e60b275a54a0230cf?ds=inline client: debounce --- 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() {