diff options
| author | Selene ToyKeeper | 2017-12-12 15:22:42 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2017-12-12 15:22:42 -0700 |
| commit | 8c13fd82557dadbe81023c534cd19c31ec40bde4 (patch) | |
| tree | 540cab9fb6a09153fb99f8e5500aa670cb0b3fcb /spaghetti-monster/fsm-wdt.c | |
| parent | Greatly improved button debouncing. Helps a lot on FW3A and my light saber. (diff) | |
| download | anduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.tar.gz anduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.tar.bz2 anduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.zip | |
Debouncing finally works (at least, it does on my two test hosts).
Diffstat (limited to '')
| -rw-r--r-- | spaghetti-monster/fsm-wdt.c | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/spaghetti-monster/fsm-wdt.c b/spaghetti-monster/fsm-wdt.c index bee2914..777bef0 100644 --- a/spaghetti-monster/fsm-wdt.c +++ b/spaghetti-monster/fsm-wdt.c @@ -45,47 +45,23 @@ inline void WDT_off() // clock tick -- this runs every 16ms (62.5 fps) ISR(WDT_vect) { + // detect and emit button change events + uint8_t was_pressed = button_last_state; + uint8_t pressed = button_is_pressed(); + if (was_pressed != pressed) PCINT_inner(pressed); + //if (ticks_since_last_event < 0xff) ticks_since_last_event ++; // increment, but loop from max back to half ticks_since_last_event = (ticks_since_last_event + 1) \ | (ticks_since_last_event & 0x8000); - // just in case the pin change interrupt missed something - uint8_t le_num = last_event_num(); - uint8_t last_event = 0; - if (le_num >= 1) last_event = current_event[le_num-1]; - uint8_t pressed = button_is_pressed(); - uint8_t was_pressed_before = (last_event == A_PRESS) || (last_event == A_HOLD); - //if (pressed != button_last_state) { - if (pressed != was_pressed_before) { - PCINT_inner(pressed); - /* - uint8_t pushed; - if (pressed) { - pushed = push_event(A_PRESS); - } else { - pushed = push_event(A_RELEASE); - } - - // check if sequence matches any defined sequences - // if so, send event to current state callback - if (pushed) { - button_last_state = pressed; - emit_current_event(0); - } - */ - } - PCINT_since_WDT = 0; - // if time since last event exceeds timeout, // append timeout to current event sequence, then // send event to current state callback // preload recent events - //uint8_t le_num = last_event_num(); - le_num = last_event_num(); - //uint8_t last_event = 0; - last_event = 0; + uint8_t le_num = last_event_num(); + uint8_t last_event = 0; uint8_t prev_event = 0; if (le_num >= 1) last_event = current_event[le_num-1]; if (le_num >= 2) prev_event = current_event[le_num-2]; |
