check mode change only on btn release
This commit is contained in:
35
main.c
35
main.c
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user