summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schodet2011-06-14 00:49:16 +0200
committerNicolas Schodet2011-09-26 19:41:34 +0200
commitca0e7d4a5b7e0d2ae98580fd2dd17fb82fc43d1d (patch)
tree79e23252a76cba1dada3b5f6fcaf78ccbaeb1dc7
parentcbcfce6e5b75b66deacb559858cb9acc7a4e2d52 (diff)
src/common: add button debounce
-rw-r--r--src/common/button.c18
1 files changed, 15 insertions, 3 deletions
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: <nico at ni.fr.eu.org>
* }}} */
+#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