From ca0e7d4a5b7e0d2ae98580fd2dd17fb82fc43d1d Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 14 Jun 2011 00:49:16 +0200 Subject: src/common: add button debounce --- src/common/button.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/common/button.c') diff --git a/src/common/button.c b/src/common/button.c index 78e5b26..8d1a49b 100644 --- a/src/common/button.c +++ b/src/common/button.c @@ -21,12 +21,17 @@ * Web: http://ni.fr.eu.org/ * Email: * }}} */ +#include "common.h" +#include "modules/utils/utils.h" #include "io.h" #include "button.h" /** Button port. */ #define BUTTON_IO B, 1 +/** Delay for the button to be considered debounced. */ +#define BUTTON_DEBOUNCE_MS 100 + void button_init (void) { @@ -39,9 +44,16 @@ button_wait (void) /* Wait until button is pressed. */ while (IO_GET (BUTTON_IO)) ; - /* Wait until button is released. */ - while (!IO_GET (BUTTON_IO)) - ; + /* Wait until button is really released. */ + uint8_t debounce_ms = 0; + while (debounce_ms < BUTTON_DEBOUNCE_MS) + { + utils_delay_ms (1); + if (IO_GET (BUTTON_IO)) + debounce_ms++; + else + debounce_ms = 0; + } } uint8_t -- cgit v1.2.3