From a6d7bc0b278aa7251f6d5f3d9813f49b028092bb Mon Sep 17 00:00:00 2001 From: Vasily Davydov Date: Wed, 26 Oct 2022 21:21:54 +0300 Subject: [PATCH] state-handler: add timeout_error handling --- esp-vent-main/inc/StateHandler/StateHandler.h | 3 +- .../src/StateHandler/StateHandler.cpp | 43 +++++++++++++------ esp-vent-main/src/Timer.cpp | 20 ++++----- esp-vent-main/src/esp-vent-main.cpp | 7 ++- 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/esp-vent-main/inc/StateHandler/StateHandler.h b/esp-vent-main/inc/StateHandler/StateHandler.h index 32789dd..2416bc9 100644 --- a/esp-vent-main/inc/StateHandler/StateHandler.h +++ b/esp-vent-main/inc/StateHandler/StateHandler.h @@ -60,7 +60,8 @@ enum _mode { MANUAL, AUTO, - SENSORS + SENSORS, + ERROR_TIMEOUT }; enum _sensors diff --git a/esp-vent-main/src/StateHandler/StateHandler.cpp b/esp-vent-main/src/StateHandler/StateHandler.cpp index 78a38c0..141f0d0 100644 --- a/esp-vent-main/src/StateHandler/StateHandler.cpp +++ b/esp-vent-main/src/StateHandler/StateHandler.cpp @@ -48,6 +48,12 @@ StateHandler::displaySet (size_t mode) snprintf (line_down, 16, "HUM:%02d CO2:%02d", sensors_data[HUMIDITY], sensors_data[CO2]); break; + case ERROR_TIMEOUT: + snprintf (line_up, 16, " FORCE STOP ", sensors_data[PRESSUREDAT], + sensors_data[TEMPERATURE]); + snprintf (line_down, 16, "REAS: TIMEOUT", sensors_data[HUMIDITY], + sensors_data[CO2]); + break; default: break; } @@ -93,7 +99,6 @@ StateHandler::stateInit (const Event &event) case Event::eEnter: break; case Event::eExit: - _lcd->clear (); break; case Event::eKey: handleControlButtons (event.value); @@ -127,14 +132,21 @@ StateHandler::stateManual (const Event &event) case Event::eTick: if (event.value % 5000 == 0) { - updateSensorValues (); + updateSensorValues (); displaySet (SENSORS); } if (event.value % 500 == 0) { SetState (&StateHandler::stateGetPressure); - break; } + if (event.value < 0) + { + displaySet (ERROR_TIMEOUT); + fan_speed.setInit (0); + value[(current_mode)].setInit (0); + SetState (&StateHandler::stateInit); + } + break; } } @@ -154,13 +166,20 @@ StateHandler::stateAuto (const Event &event) case Event::eTick: if (event.value % 5000 == 0) { - updateSensorValues (); + updateSensorValues (); displaySet (SENSORS); } if (event.value % 500 == 0) { SetState (&StateHandler::stateGetPressure); } + if (event.value < 0) + { + displaySet (ERROR_TIMEOUT); + fan_speed.setInit (0); + value[(current_mode)].setInit (0); + SetState (&StateHandler::stateInit); + } pid (); this->A01->write (fan_speed.getCurrent ()); break; @@ -199,10 +218,10 @@ StateHandler::handleControlButtons (uint8_t button) switch (button) { case BUTTON_CONTROL_DOWN: - this->value[(current_mode) ? AUTO : MANUAL].dec (); + this->value[(current_mode)].dec (); break; case BUTTON_CONTROL_UP: - this->value[(current_mode) ? AUTO : MANUAL].inc (); + this->value[(current_mode)].inc (); break; case BUTTON_CONTROL_TOG_MODE: current_mode = !current_mode; @@ -235,7 +254,6 @@ StateHandler::fan_speed_normalized () return speed * 10; } - void StateHandler::pid () { @@ -252,10 +270,9 @@ void StateHandler::updateSensorValues () { - sensors_data[TEMPERATURE] = humidity.readT (); - sensors_data[PRESSUREDAT] = pressure->getPressure (); - sensors_data[CO2] = co2.read (); - state_timer->tickCounter(5); - sensors_data[HUMIDITY] = humidity.readRH (); + sensors_data[TEMPERATURE] = humidity.readT (); + sensors_data[PRESSUREDAT] = pressure->getPressure (); + sensors_data[CO2] = co2.read (); + state_timer->tickCounter (5); + sensors_data[HUMIDITY] = humidity.readRH (); } - diff --git a/esp-vent-main/src/Timer.cpp b/esp-vent-main/src/Timer.cpp index 844040d..4da4031 100644 --- a/esp-vent-main/src/Timer.cpp +++ b/esp-vent-main/src/Timer.cpp @@ -20,21 +20,21 @@ extern "C" Timer::Timer (uint32_t freq) : freq (freq) { -mode = true; + mode = true; Chip_Clock_SetSysTickClockDiv (1); uint32_t sysTickRate = Chip_Clock_GetSysTickClockRate (); SysTick_Config (sysTickRate / freq); - resetCounter(); + resetCounter (); timer = 0; systicks.store (0, std::memory_order_relaxed); } -Timer::Timer(bool mode) +Timer::Timer (bool mode) { - this->mode = false; - resetCounter(); - timer = 0; - systicks.store (0, std::memory_order_relaxed); + this->mode = false; + resetCounter (); + timer = 0; + systicks.store (0, std::memory_order_relaxed); } Timer::~Timer () @@ -47,9 +47,9 @@ Timer::tickCounter (int ms) { if (counter >= INT_MAX) { - resetCounter(); + resetCounter (); } - counter.fetch_add(ms, std::memory_order_relaxed); + counter.fetch_add (ms, std::memory_order_relaxed); Sleep (ms); } @@ -78,5 +78,5 @@ Timer::resetCounter () uint32_t millis () { - return systicks.load(std::memory_order_relaxed); + return systicks.load (std::memory_order_relaxed); } diff --git a/esp-vent-main/src/esp-vent-main.cpp b/esp-vent-main/src/esp-vent-main.cpp index 7d9006b..675bb67 100644 --- a/esp-vent-main/src/esp-vent-main.cpp +++ b/esp-vent-main/src/esp-vent-main.cpp @@ -82,7 +82,12 @@ main (void) int getcounterValue = 0; while (1) { - getcounterValue = glob_time.getCounter(); + getcounterValue = glob_time.getCounter (); + if (getcounterValue > 15000) + { + glob_time.resetCounter (); + ventMachine.HandleState (Event (Event::eTick, -1)); + } sw_up.listen (); sw_down.listen (); sw_toggle.listen ();