From 20fd8c9be4e9ff5f72c9f03a8b404b56d9c5fb6d Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Mon, 26 Feb 2018 16:17:36 -0800 Subject: [PATCH] Fixed switch debounce bug. --- CHANGELOG.md | 3 +++ package.json | 2 +- src/avr/src/switch.c | 12 ++++++------ src/py/bbctrl/State.py | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13e69b6..ebd69e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ Buildbotics CNC Controller Firmware Change Log ============================================== +## v0.3.16 + - Fixed switch debounce bug. + ## v0.3.15 - Suppress warning missing config.json warning after config reset. - Fixed EStop reboot loop. diff --git a/package.json b/package.json index 208b4d8..b55956c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bbctrl", - "version": "0.3.15", + "version": "0.3.16", "homepage": "http://buildbotics.com/", "repository": "https://github.com/buildbotics/bbctrl-firmware", "license": "GPL-3.0+", diff --git a/src/avr/src/switch.c b/src/avr/src/switch.c index 40e3a88..45eb3f7 100644 --- a/src/avr/src/switch.c +++ b/src/avr/src/switch.c @@ -29,6 +29,7 @@ #include "config.h" #include +#include typedef struct { @@ -83,7 +84,7 @@ void switch_rtc_callback() { // Debounce switch bool state = IN_PIN(s->pin); - if (state == s->state) s->debounce = 0; + if (state == s->state && s->initialized) s->debounce = 0; else if ((state && ++s->debounce == SWITCH_DEBOUNCE) || (!state && --s->debounce == -SWITCH_DEBOUNCE)) { s->state = state; @@ -96,16 +97,15 @@ void switch_rtc_callback() { bool switch_is_active(switch_id_t sw) { - if (sw < 0 || num_switches <= sw) return false; - - if (!switches[sw].initialized) return false; + if (sw < 0 || num_switches <= sw || !switches[sw].initialized) return false; // NOTE, switch inputs are active lo switch (switches[sw].type) { - case SW_DISABLED: break; // A disabled switch cannot be active - case SW_NORMALLY_OPEN: return !switches[sw].state; + case SW_DISABLED: break; // A disabled switch cannot be active + case SW_NORMALLY_OPEN: return !switches[sw].state; case SW_NORMALLY_CLOSED: return switches[sw].state; } + return false; } diff --git a/src/py/bbctrl/State.py b/src/py/bbctrl/State.py index f84c0d2..ad630a0 100644 --- a/src/py/bbctrl/State.py +++ b/src/py/bbctrl/State.py @@ -158,7 +158,7 @@ class State(object): for motor in range(6): if not ('%dan' % motor) in self.vars: continue motor_axis = 'xyzabc'[self.vars['%dan' % motor]] - if motor_axis == axis.lower() and self.vars['%dpm' % motor]: + if motor_axis == axis.lower() and self.vars.get('%dpm' % motor, 0): return motor -- 2.27.0