diff --git a/firmware/include/states/TimerState.h b/firmware/include/states/TimerState.h index 69a91ac..af4c004 100644 --- a/firmware/include/states/TimerState.h +++ b/firmware/include/states/TimerState.h @@ -11,10 +11,11 @@ class TimerState : public State void update() override; void exit() override; - void setTimer(int duration, unsigned long elapsedTime); + void setTimer(int duration, unsigned long elapsedTime = 0); private: int duration; - unsigned long startTime; unsigned long elapsedTime; + unsigned long startTime; + bool doublePressReceived; // Flag to handle double press in update loop }; \ No newline at end of file diff --git a/firmware/src/states/TimerState.cpp b/firmware/src/states/TimerState.cpp index 0d5a695..6710631 100644 --- a/firmware/src/states/TimerState.cpp +++ b/firmware/src/states/TimerState.cpp @@ -1,11 +1,12 @@ #include "StateMachine.h" #include "Controllers.h" -TimerState::TimerState() : duration(0), elapsedTime(0), startTime(0) {} +TimerState::TimerState() : duration(0), elapsedTime(0), startTime(0), doublePressReceived(false) {} void TimerState::enter() { Serial.println("Entering Timer State"); + doublePressReceived = false; // Start time based on the elapsed time startTime = millis() - (elapsedTime * 1000); @@ -30,11 +31,7 @@ void TimerState::enter() inputController.onDoublePressHandler([this]() { Serial.println("Timer State: Button Double Pressed"); - - // Send 'Stop' webhook (canceled) - networkController.sendWebhookAction("stop"); - displayController.showCancel(); - stateMachine.changeState(&StateMachine::idleState); // Transition to IdleState + doublePressReceived = true; // Set flag and handle in update loop }); networkController.startBluetooth(); @@ -46,6 +43,16 @@ void TimerState::update() inputController.update(); ledController.update(); + // Handle double press in update loop + if (doublePressReceived) { + displayController.showCancel(); + ledController.turnOff(); + networkController.stopBluetooth(); + networkController.sendWebhookAction("stop"); + stateMachine.changeState(&StateMachine::idleState); + return; + } + unsigned long currentTime = millis(); elapsedTime = (currentTime - startTime) / 1000;