Peripherals: Better button logic
Long press is now registered while the button is still held down
This commit is contained in:
parent
d3b85b7f6c
commit
a0639ec3f1
@ -42,19 +42,24 @@ public:
|
|||||||
const bool is_pressed = sw.read();
|
const bool is_pressed = sw.read();
|
||||||
ButtonPress new_state = ButtonPress::NOT_PRESSED;
|
ButtonPress new_state = ButtonPress::NOT_PRESSED;
|
||||||
|
|
||||||
|
const std::uint32_t time_held = hal::getMillis() - time_pressed_down_;
|
||||||
|
|
||||||
if (is_pressed && !was_pressed_)
|
if (is_pressed && !was_pressed_)
|
||||||
{
|
{
|
||||||
time_pressed_down_ = hal::getMillis();
|
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_SHORT_PRESS)
|
||||||
if (time_held > TIMEOUT_LONG_PRESS)
|
|
||||||
new_state = ButtonPress::LONG_PRESS;
|
|
||||||
else if (time_held > TIMEOUT_SHORT_PRESS)
|
|
||||||
new_state = ButtonPress::SHORT_PRESS;
|
new_state = ButtonPress::SHORT_PRESS;
|
||||||
|
|
||||||
time_pressed_down_ = 0;
|
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;
|
was_pressed_ = is_pressed;
|
||||||
current_state_ = new_state;
|
current_state_ = new_state;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user