This library implements a class that models a momentary push button and recognizes user input gestures, such as clicks, double-clicks, long presses, etc.
The DebouncedButton class does not do any of the actual GPIO manipulation. The
client application is expected to call DebouncedButton::update frequently
(i.e. every few milliseconds) with the latest reading from the button pin. The
update method returns an Input enum to indicate if a user gesture has been
recognized on that update.
The Input enumeration values that can be returned from update are these:
| Name | Description |
|---|---|
| NONE | No recognized gesture |
| CLICK | Button was pressed and released |
| DOUBLE_CLICK | Button was clicked twice rapidly |
| LONG_PRESS | Button was held down longer than a click |
| CLICK_AND_LONG_PRESS | Button was clicked and then long pressed |
| DOUBLE_CLICK_AND_LONG_PRESS | Button was double clicked and then long pressed |
| RELEASE | Button was released after a long press |
The Input values that include _LONG_PRESS are delivered when the long press
is first detected. All further calls to update with the same button reading
will return NONE, and when the button is released the update method will
return a RELEASE input. The state and duration methods can be called at
any time for further information about the button.
This library includes unit tests that can be run on a host system (not on the Arduino) using CMake. From the top-level of the library repo, these commands should run the tests:
cd tests
cmake -S . -B build
cmake --build build && (cd build; ctest --output-on-failure)
The first cmake command above only needs to be run once, the second command
can be run each time the source is changed to check the test status.