diff --git a/src/modules/buttons.h b/src/modules/buttons.h index a460a6c..c6e5a79 100644 --- a/src/modules/buttons.h +++ b/src/modules/buttons.h @@ -38,6 +38,8 @@ public: /// @param index of the button to check inline bool ButtonPressed(uint8_t index) const { return buttons[index].Pressed(); } + inline bool ButtonReleased(uint8_t index) const { return buttons[index].Released(); } + /// @returns true if any of the button is pressed inline bool AnyButtonPressed() const { for (uint8_t i = 0; i < config::buttonCount; ++i) { diff --git a/src/modules/debouncer.h b/src/modules/debouncer.h index c30e4e5..a5f7946 100644 --- a/src/modules/debouncer.h +++ b/src/modules/debouncer.h @@ -19,6 +19,7 @@ public: /// @returns true if debounced value is currently considered as pressed inline bool Pressed() const { return f.state == State::WaitForRelease; } + inline bool Released() const { return f.state == State::Update; } /// State machine stepping routine void Step(uint16_t time, bool press); diff --git a/src/modules/user_input.cpp b/src/modules/user_input.cpp index a2ed731..4564aac 100644 --- a/src/modules/user_input.cpp +++ b/src/modules/user_input.cpp @@ -8,11 +8,11 @@ namespace user_input { UserInput userInput; void UserInput::Step() { - if (buttons::buttons.ButtonPressed(mb::Left)) + if (buttons::buttons.ButtonReleased(mb::Left)) eventQueue.push(Event::Left); - if (buttons::buttons.ButtonPressed(mb::Middle)) + if (buttons::buttons.ButtonReleased(mb::Middle)) eventQueue.push(Event::Middle); - if (buttons::buttons.ButtonPressed(mb::Right)) + if (buttons::buttons.ButtonReleased(mb::Right)) eventQueue.push(Event::Right); }