diff --git a/Peripherals/Inc/peripherals_button.hpp b/Peripherals/Inc/peripherals_button.hpp index 954769a..37d4e03 100644 --- a/Peripherals/Inc/peripherals_button.hpp +++ b/Peripherals/Inc/peripherals_button.hpp @@ -42,19 +42,24 @@ public: const bool is_pressed = sw.read(); ButtonPress new_state = ButtonPress::NOT_PRESSED; + const std::uint32_t time_held = hal::getMillis() - time_pressed_down_; + if (is_pressed && !was_pressed_) { time_pressed_down_ = hal::getMillis(); - } else if (!is_pressed && was_pressed_) + } + else if (!is_pressed && was_pressed_) { - const std::uint32_t time_held = hal::getMillis() - time_pressed_down_; - if (time_held > TIMEOUT_LONG_PRESS) - new_state = ButtonPress::LONG_PRESS; - else if (time_held > TIMEOUT_SHORT_PRESS) + if (time_held > TIMEOUT_SHORT_PRESS) new_state = ButtonPress::SHORT_PRESS; time_pressed_down_ = 0; } + else if (is_pressed && was_pressed_) + { + if (current_state_ == ButtonPress::NOT_PRESSED && time_held > TIMEOUT_LONG_PRESS) + new_state = ButtonPress::LONG_PRESS; + } was_pressed_ = is_pressed; current_state_ = new_state;