aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-wdt.c
diff options
context:
space:
mode:
authorSelene ToyKeeper2017-12-11 19:56:15 -0700
committerSelene ToyKeeper2017-12-11 19:56:15 -0700
commitd50c46d08a6d7f52dffb9b43784c62b11d78df8c (patch)
treeba93cc6fa1d3f681e850d57ed92721e859b4ff30 /spaghetti-monster/fsm-wdt.c
parentWorking toward a FW3A release now. Made strobes use Nx7135 (when available) ... (diff)
downloadanduril-d50c46d08a6d7f52dffb9b43784c62b11d78df8c.tar.gz
anduril-d50c46d08a6d7f52dffb9b43784c62b11d78df8c.tar.bz2
anduril-d50c46d08a6d7f52dffb9b43784c62b11d78df8c.zip
Greatly improved button debouncing. Helps a lot on FW3A and my light saber.
Debouncing isn't 100% yet though.
Diffstat (limited to '')
-rw-r--r--spaghetti-monster/fsm-wdt.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/spaghetti-monster/fsm-wdt.c b/spaghetti-monster/fsm-wdt.c
index 7cbe0d2..bee2914 100644
--- a/spaghetti-monster/fsm-wdt.c
+++ b/spaghetti-monster/fsm-wdt.c
@@ -50,13 +50,42 @@ ISR(WDT_vect) {
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();
- uint8_t last_event = 0;
+ //uint8_t le_num = last_event_num();
+ le_num = last_event_num();
+ //uint8_t last_event = 0;
+ 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];