check mode change only on btn release

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

35
main.c
View File

@ -42,16 +42,16 @@ volatile bool bBtnLongPressed = false;
volatile eMode eModeCurrent = ANIMATION_BLINK;
// 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);
void ledAnimationBlink(bool resetCounters);
void ledAnimationGlow(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
@ -74,7 +74,7 @@ int main(void)
while (true)
{
handleSwitch(); // Check switch state
bBtnLongPressed = handleSwitch(); // Check switch state
// Light LEDs while button is pressed
if (bBtnLongPressed)
@ -176,7 +176,7 @@ static void battery_level_indicator(void)
*
* A long press toggles ::bLedEnabled.
*/
static void handleSwitch(void)
static bool handleSwitch(void)
{
static uint16_t pressTicks = 0; ///< Press duration counter
static bool prevPressed = false; ///< Previous button state
@ -185,27 +185,32 @@ static void handleSwitch(void)
if (pressed)
{
bBtnLongPressed = true;
if (pressTicks < 0xFFFF)
pressTicks++; // Prevent overflow
}
else
{
bBtnLongPressed = false;
pressTicks = 0;
}
if (prevPressed && pressTicks >= MS_TO_TICKS(BUTTON_SHORT_PRESS_DURATION_MS))
// 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();
}
}
if (prevPressed && pressTicks >= MS_TO_TICKS(BUTTON_LONG_PRESS_DURATION_MS))
pressTicks = 0;
}
if (pressed && pressTicks >= MS_TO_TICKS(BUTTON_LONG_PRESS_DURATION_MS))
{
bLedEnabled = !bLedEnabled; // Toggle LED blinking
}
prevPressed = pressed;
return pressed;
}
/**