check mode change only on btn release

This commit is contained in:
2025-11-08 22:27:49 +01:00
parent a13381603b
commit 55426b5f2d

37
main.c
View File

@ -42,16 +42,16 @@ volatile bool bBtnLongPressed = false;
volatile eMode eModeCurrent = ANIMATION_BLINK; volatile eMode eModeCurrent = ANIMATION_BLINK;
// Forward declarations // Forward declarations
ISR(PORTA_PORT_vect);
static void software_reset(void);
static inline void leds_off(void);
static inline void leds_on(void);
static void battery_level_indicator(void);
static bool handleSwitch(void);
static inline void toggleMode(void); static inline void toggleMode(void);
void ledAnimationBlink(bool resetCounters); void ledAnimationBlink(bool resetCounters);
void ledAnimationGlow(void); void ledAnimationGlow(void);
void ledStaticFull(void); void ledStaticFull(void);
static inline void leds_off(void);
static inline void leds_on(void);
static void battery_level_indicator(void);
static void handleSwitch(void);
static void software_reset(void);
ISR(PORTA_PORT_vect);
/** /**
* @brief Main entry point * @brief Main entry point
@ -74,7 +74,7 @@ int main(void)
while (true) while (true)
{ {
handleSwitch(); // Check switch state bBtnLongPressed = handleSwitch(); // Check switch state
// Light LEDs while button is pressed // Light LEDs while button is pressed
if (bBtnLongPressed) if (bBtnLongPressed)
@ -176,7 +176,7 @@ static void battery_level_indicator(void)
* *
* A long press toggles ::bLedEnabled. * A long press toggles ::bLedEnabled.
*/ */
static void handleSwitch(void) static bool handleSwitch(void)
{ {
static uint16_t pressTicks = 0; ///< Press duration counter static uint16_t pressTicks = 0; ///< Press duration counter
static bool prevPressed = false; ///< Previous button state static bool prevPressed = false; ///< Previous button state
@ -185,27 +185,32 @@ static void handleSwitch(void)
if (pressed) if (pressed)
{ {
bBtnLongPressed = true;
if (pressTicks < 0xFFFF) if (pressTicks < 0xFFFF)
pressTicks++; // Prevent overflow pressTicks++; // Prevent overflow
} }
else else
{ {
bBtnLongPressed = false; // Button released
if (prevPressed)
{
// Check if it was a short press (not a long press)
if (pressTicks >= MS_TO_TICKS(BUTTON_SHORT_PRESS_DURATION_MS) &&
pressTicks < MS_TO_TICKS(BUTTON_LONG_PRESS_DURATION_MS))
{
toggleMode();
}
}
pressTicks = 0; pressTicks = 0;
} }
if (prevPressed && pressTicks >= MS_TO_TICKS(BUTTON_SHORT_PRESS_DURATION_MS)) if (pressed && pressTicks >= MS_TO_TICKS(BUTTON_LONG_PRESS_DURATION_MS))
{
toggleMode();
}
if (prevPressed && pressTicks >= MS_TO_TICKS(BUTTON_LONG_PRESS_DURATION_MS))
{ {
bLedEnabled = !bLedEnabled; // Toggle LED blinking bLedEnabled = !bLedEnabled; // Toggle LED blinking
} }
prevPressed = pressed; prevPressed = pressed;
return pressed;
} }
/** /**