From c7ed343fa2a29ca558baf5a673374fb26eca1d76 Mon Sep 17 00:00:00 2001 From: Vasily Davydov Date: Fri, 28 Oct 2022 00:17:57 +0300 Subject: [PATCH] main: add sensors display with A2 switch --- esp-vent-main/inc/StateHandler/StateHandler.h | 10 ++- esp-vent-main/inc/common_control_values.h | 2 +- .../src/StateHandler/StateHandler.cpp | 71 +++++++++++++++---- esp-vent-main/src/esp-vent-main.cpp | 5 ++ 4 files changed, 72 insertions(+), 16 deletions(-) diff --git a/esp-vent-main/inc/StateHandler/StateHandler.h b/esp-vent-main/inc/StateHandler/StateHandler.h index ea3eefa..e31af4d 100644 --- a/esp-vent-main/inc/StateHandler/StateHandler.h +++ b/esp-vent-main/inc/StateHandler/StateHandler.h @@ -44,7 +44,7 @@ enum _buttons /** Optional button to toggle the * activation of the current setting. * Not compulsory to be used. */ - BUTTON_CONTROL_TOG_ACTIVE + BUTTON_CONTROL_TOG_ACTIVE, }; enum _bars @@ -123,6 +123,8 @@ private: PressureWrapper *_pressure; bool pressure_status; bool task_is_pending; + bool sensor_values_ready; + bool sensor_mode; uint8_t pressure_achieved; Timer *state_timer; /* CO2 sensor object */ @@ -177,6 +179,12 @@ private: */ void stateGetPressure (const Event &event); + /** Show sensors + * + * @param event event of the state + */ + void stateShowSensors (const Event &event); + /** Handle button presses * * @param button current button diff --git a/esp-vent-main/inc/common_control_values.h b/esp-vent-main/inc/common_control_values.h index 6f64ff0..5a60eec 100644 --- a/esp-vent-main/inc/common_control_values.h +++ b/esp-vent-main/inc/common_control_values.h @@ -19,7 +19,7 @@ enum _global_values { LCD_SIZE = 16, TIMER_GLOBAL_TIMEOUT = 120000, - TIMER_SENSORS_TIMEOUT = 5000, + TIMER_SENSORS_TIMEOUT = 500, TIMER_PRESSURE_TIMEOUT = 150, }; diff --git a/esp-vent-main/src/StateHandler/StateHandler.cpp b/esp-vent-main/src/StateHandler/StateHandler.cpp index f0c6512..b83e749 100644 --- a/esp-vent-main/src/StateHandler/StateHandler.cpp +++ b/esp-vent-main/src/StateHandler/StateHandler.cpp @@ -17,6 +17,7 @@ StateHandler::StateHandler (LiquidCrystal *lcd, Fan *propeller, current = &StateHandler::stateInit; (this->*current) (Event (Event::eEnter)); current_mode = MANUAL; + sensor_mode = false; pressure_achieved = 0; } @@ -50,6 +51,7 @@ StateHandler::displaySet (size_t mode) sensors_data[PRESSUREDAT], sensors_data[TEMPERATURE]); snprintf (line_down, LCD_SIZE, "HUM:%02d CO2:%03d", sensors_data[HUMIDITY], sensors_data[CO2]); + sensor_values_ready = false; break; case ERROR_TIMEOUT: snprintf (line_up, LCD_SIZE, " FORCE STOP "); @@ -149,10 +151,11 @@ StateHandler::stateAuto (const Event &event) break; case Event::eTick: handleTickValue (event.value); - if(saved_set_value[AUTO]){ - pid (); - this->_propeller->spin (fan_speed.getCurrent ()); - } + if (saved_set_value[AUTO]) + { + pid (); + this->_propeller->spin (fan_speed.getCurrent ()); + } if (saved_curr_value[AUTO] == saved_set_value[AUTO]) { ++pressure_achieved; @@ -193,6 +196,33 @@ StateHandler::stateGetPressure (const Event &event) } } +void +StateHandler::stateShowSensors (const Event &event) +{ + switch (event.type) + { + case Event::eEnter: + displaySet (SENSORS); + break; + case Event::eExit: + break; + case Event::eKey: + handleControlButtons (event.value); + break; + case Event::eTick: + handleTickValue (event.value); + if (sensor_values_ready) + { + displaySet (SENSORS); + } + if (!sensor_mode) + { + SetState (&StateHandler::stateInit); + } + break; + } +} + void StateHandler::handleControlButtons (uint8_t button) { @@ -214,6 +244,12 @@ StateHandler::handleControlButtons (uint8_t button) state_timer->resetCounter (); return; break; + case BUTTON_CONTROL_TOG_ACTIVE: + task_is_pending = false; + sensor_mode = !sensor_mode; + SetState (&StateHandler::stateShowSensors); + return; + break; default: break; } @@ -230,21 +266,24 @@ StateHandler::handleControlButtons (uint8_t button) void StateHandler::handleTickValue (int value) { - if (sensor_timer > TIMER_SENSORS_TIMEOUT) + if (sensor_timer > TIMER_SENSORS_TIMEOUT && sensor_mode) { updateSensorValues (); sensor_timer = 0; } if (value > TIMER_PRESSURE_TIMEOUT) { - if(!(saved_curr_value[current_mode] == 0 && saved_set_value[current_mode] == 0)) { - SetState (&StateHandler::stateGetPressure); - } + if (!(saved_curr_value[current_mode] == 0 + && saved_set_value[current_mode] == 0) + && !sensor_mode) + { + SetState (&StateHandler::stateGetPressure); + } sensor_timer += value; error_timer += value; state_timer->resetCounter (); } - if (error_timer > TIMER_GLOBAL_TIMEOUT && task_is_pending) + if (error_timer > TIMER_GLOBAL_TIMEOUT && task_is_pending && !sensor_mode) { this->fan_speed.setInit (0); this->value[(current_mode)].setInit (0); @@ -305,9 +344,13 @@ StateHandler::pid () 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 (); + if (!sensor_values_ready) + { + sensors_data[TEMPERATURE] = humidity.readT (); + sensors_data[PRESSUREDAT] = _pressure->getPressure (); + sensors_data[CO2] = co2.read (); + state_timer->tickCounter (5); + sensors_data[HUMIDITY] = humidity.readRH (); + sensor_values_ready = true; + } } diff --git a/esp-vent-main/src/esp-vent-main.cpp b/esp-vent-main/src/esp-vent-main.cpp index 5167b14..9ec71b3 100644 --- a/esp-vent-main/src/esp-vent-main.cpp +++ b/esp-vent-main/src/esp-vent-main.cpp @@ -68,6 +68,10 @@ main (void) DigitalIoPin b_toggle (0, 5, true, true, true); // A3 SwitchController sw_toggle (&b_toggle, &ventMachine, BUTTON_CONTROL_TOG_MODE); + + DigitalIoPin b_toggle_sens (1, 8, true, true, true); // A3 + SwitchController sw_toggle_sens (&b_toggle_sens, &ventMachine, + BUTTON_CONTROL_TOG_ACTIVE); /* Other declarations */ int getcounterValue; while (1) @@ -76,6 +80,7 @@ main (void) sw_up.listen (); sw_down.listen (); sw_toggle.listen (); + sw_toggle_sens.listen(); ventMachine.HandleState (Event (Event::eTick, getcounterValue)); glob_time.tickCounter (1); }