summaryrefslogtreecommitdiff
path: root/ButtonHandler
diff options
context:
space:
mode:
authorMike Fiore <mfiore@multitech.com>2015-11-13 13:07:21 -0600
committerMike Fiore <mfiore@multitech.com>2015-11-13 13:07:21 -0600
commit1c3cf27c5676d976d3a4b6b70420119b6541250e (patch)
tree5412794cf16acd0b36fffe1bcd869de29bb28cd2 /ButtonHandler
parent85d312c5b3231941ba01bfe2f2fdcd1bc9a59444 (diff)
downloadmtdot-box-evb-factory-firmware-1c3cf27c5676d976d3a4b6b70420119b6541250e.tar.gz
mtdot-box-evb-factory-firmware-1c3cf27c5676d976d3a4b6b70420119b6541250e.tar.bz2
mtdot-box-evb-factory-firmware-1c3cf27c5676d976d3a4b6b70420119b6541250e.zip
update ButtonHandler - ignore presses less than 20 ms
Diffstat (limited to 'ButtonHandler')
-rw-r--r--ButtonHandler/ButtonHandler.cpp52
-rw-r--r--ButtonHandler/ButtonHandler.h7
2 files changed, 47 insertions, 12 deletions
diff --git a/ButtonHandler/ButtonHandler.cpp b/ButtonHandler/ButtonHandler.cpp
index 23bcb02..0d4c006 100644
--- a/ButtonHandler/ButtonHandler.cpp
+++ b/ButtonHandler/ButtonHandler.cpp
@@ -1,11 +1,15 @@
#include "ButtonHandler.h"
+#include "MTSLog.h"
ButtonHandler::ButtonHandler(osThreadId main)
: _main(main),
_sw1(PA_12),
_sw2(PA_11),
_sw1_time(0),
- _event(none)
+ _sw2_time(0),
+ _event(none),
+ _debounce_time(20),
+ _hold_threshold(500)
{
// gpio goes low when push button is pressed
// fall handler will be the press, rise handler will be the release
@@ -15,6 +19,7 @@ ButtonHandler::ButtonHandler(osThreadId main)
_sw1.mode(PullUp);
_sw2.fall(this, &ButtonHandler::sw2_fall);
+ _sw2.rise(this, &ButtonHandler::sw2_rise);
_sw2.mode(PullUp);
}
@@ -24,22 +29,45 @@ ButtonEvent ButtonHandler::getButtonEvent() {
return event;
}
+void ButtonHandler::sw1_fall() {
+ if (! _sw1_running) {
+ _sw1_running = true;
+ _sw1_timer.reset();
+ _sw1_timer.start();
+ }
+}
+
void ButtonHandler::sw1_rise() {
- _sw1_timer.stop();
- _sw1_time = _sw1_timer.read_ms();
+ if (_sw1_running) {
+ _sw1_running = false;
+ _sw1_timer.stop();
+ _sw1_time = _sw1_timer.read_ms();
- if (_sw1_time > 10) {
- _event = (_sw1_time > 500) ? sw1_hold : sw1_press;
- osSignalSet(_main, buttonSignal);
+ if (_sw1_time > _debounce_time) {
+ _event = (_sw1_time > _hold_threshold) ? sw1_hold : sw1_press;
+ osSignalSet(_main, buttonSignal);
+ }
}
}
-void ButtonHandler::sw1_fall() {
- _sw1_timer.reset();
- _sw1_timer.start();
+void ButtonHandler::sw2_fall() {
+ if (! _sw2_running) {
+ _sw2_running = true;
+ _sw2_timer.reset();
+ _sw2_timer.start();
+ }
}
-void ButtonHandler::sw2_fall() {
- _event = sw2_press;
- osSignalSet(_main, buttonSignal);
+void ButtonHandler::sw2_rise() {
+ if (_sw2_running) {
+ _sw2_running = false;
+ _sw2_timer.stop();
+ _sw2_time = _sw2_timer.read_ms();
+
+ if (_sw2_time > _debounce_time) {
+ _event = sw2_press;
+ osSignalSet(_main, buttonSignal);
+ }
+ }
}
+
diff --git a/ButtonHandler/ButtonHandler.h b/ButtonHandler/ButtonHandler.h
index 3eb8298..cfca1d7 100644
--- a/ButtonHandler/ButtonHandler.h
+++ b/ButtonHandler/ButtonHandler.h
@@ -24,13 +24,20 @@ class ButtonHandler {
void sw1_fall();
void sw1_rise();
void sw2_fall();
+ void sw2_rise();
osThreadId _main;
InterruptIn _sw1;
InterruptIn _sw2;
Timer _sw1_timer;
+ Timer _sw2_timer;
time_t _sw1_time;
+ time_t _sw2_time;
+ bool _sw1_running;
+ bool _sw2_running;
ButtonEvent _event;
+ time_t _debounce_time;
+ time_t _hold_threshold;
};
#endif