State machine
Dependencies: mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter
Button.h
- Committer:
- brass_phoenix
- Date:
- 2018-10-30
- Revision:
- 1:cfa5abca6d43
- Child:
- 2:141cfcafe72b
File content as of revision 1:cfa5abca6d43:
#pragma once #include "mbed.h" // seconds that a button should be stable to be considered "pressed". // 50 ms. const float debounce_time = 0.05; class Button { private: InterruptIn pin; Timeout debounce_timeout; volatile bool pressed; volatile bool just_switched_to_pressed; volatile bool just_got_pressed; public: Button(PinName pin_name): pin(pin_name) { pin.rise(this, &Button::rise); pin.fall(this, &Button::fall); pressed = false; } void update() { if (just_got_pressed) { just_got_pressed = false; } if (just_switched_to_pressed) { just_got_pressed = true; just_switched_to_pressed = false; } } bool is_pressed() { return pressed; }; // Only active just after a state change from not pressed to pressed. // Get's reset after `update()` is called. bool has_just_been_pressed() { return just_got_pressed; }; private: void rise() { debounce_timeout.attach(this, &Button::debounce_callback, debounce_time); } void fall() { debounce_timeout.detach(); pressed = false; } void debounce_callback() { pressed = true; just_switched_to_pressed = true; } };