main: add sensors display with A2 switch

This commit is contained in:
Vasily Davydov 2022-10-28 00:17:57 +03:00
parent 759bc5034f
commit c7ed343fa2
4 changed files with 72 additions and 16 deletions

View File

@ -44,7 +44,7 @@ enum _buttons
/** Optional button to toggle the /** Optional button to toggle the
* activation of the current setting. * activation of the current setting.
* Not compulsory to be used. */ * Not compulsory to be used. */
BUTTON_CONTROL_TOG_ACTIVE BUTTON_CONTROL_TOG_ACTIVE,
}; };
enum _bars enum _bars
@ -123,6 +123,8 @@ private:
PressureWrapper *_pressure; PressureWrapper *_pressure;
bool pressure_status; bool pressure_status;
bool task_is_pending; bool task_is_pending;
bool sensor_values_ready;
bool sensor_mode;
uint8_t pressure_achieved; uint8_t pressure_achieved;
Timer *state_timer; Timer *state_timer;
/* CO2 sensor object */ /* CO2 sensor object */
@ -177,6 +179,12 @@ private:
*/ */
void stateGetPressure (const Event &event); void stateGetPressure (const Event &event);
/** Show sensors
*
* @param event event of the state
*/
void stateShowSensors (const Event &event);
/** Handle button presses /** Handle button presses
* *
* @param button current button * @param button current button

View File

@ -19,7 +19,7 @@ enum _global_values
{ {
LCD_SIZE = 16, LCD_SIZE = 16,
TIMER_GLOBAL_TIMEOUT = 120000, TIMER_GLOBAL_TIMEOUT = 120000,
TIMER_SENSORS_TIMEOUT = 5000, TIMER_SENSORS_TIMEOUT = 500,
TIMER_PRESSURE_TIMEOUT = 150, TIMER_PRESSURE_TIMEOUT = 150,
}; };

View File

@ -17,6 +17,7 @@ StateHandler::StateHandler (LiquidCrystal *lcd, Fan *propeller,
current = &StateHandler::stateInit; current = &StateHandler::stateInit;
(this->*current) (Event (Event::eEnter)); (this->*current) (Event (Event::eEnter));
current_mode = MANUAL; current_mode = MANUAL;
sensor_mode = false;
pressure_achieved = 0; pressure_achieved = 0;
} }
@ -50,6 +51,7 @@ StateHandler::displaySet (size_t mode)
sensors_data[PRESSUREDAT], sensors_data[TEMPERATURE]); sensors_data[PRESSUREDAT], sensors_data[TEMPERATURE]);
snprintf (line_down, LCD_SIZE, "HUM:%02d CO2:%03d", snprintf (line_down, LCD_SIZE, "HUM:%02d CO2:%03d",
sensors_data[HUMIDITY], sensors_data[CO2]); sensors_data[HUMIDITY], sensors_data[CO2]);
sensor_values_ready = false;
break; break;
case ERROR_TIMEOUT: case ERROR_TIMEOUT:
snprintf (line_up, LCD_SIZE, " FORCE STOP "); snprintf (line_up, LCD_SIZE, " FORCE STOP ");
@ -149,10 +151,11 @@ StateHandler::stateAuto (const Event &event)
break; break;
case Event::eTick: case Event::eTick:
handleTickValue (event.value); handleTickValue (event.value);
if(saved_set_value[AUTO]){ if (saved_set_value[AUTO])
pid (); {
this->_propeller->spin (fan_speed.getCurrent ()); pid ();
} this->_propeller->spin (fan_speed.getCurrent ());
}
if (saved_curr_value[AUTO] == saved_set_value[AUTO]) if (saved_curr_value[AUTO] == saved_set_value[AUTO])
{ {
++pressure_achieved; ++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 void
StateHandler::handleControlButtons (uint8_t button) StateHandler::handleControlButtons (uint8_t button)
{ {
@ -214,6 +244,12 @@ StateHandler::handleControlButtons (uint8_t button)
state_timer->resetCounter (); state_timer->resetCounter ();
return; return;
break; break;
case BUTTON_CONTROL_TOG_ACTIVE:
task_is_pending = false;
sensor_mode = !sensor_mode;
SetState (&StateHandler::stateShowSensors);
return;
break;
default: default:
break; break;
} }
@ -230,21 +266,24 @@ StateHandler::handleControlButtons (uint8_t button)
void void
StateHandler::handleTickValue (int value) StateHandler::handleTickValue (int value)
{ {
if (sensor_timer > TIMER_SENSORS_TIMEOUT) if (sensor_timer > TIMER_SENSORS_TIMEOUT && sensor_mode)
{ {
updateSensorValues (); updateSensorValues ();
sensor_timer = 0; sensor_timer = 0;
} }
if (value > TIMER_PRESSURE_TIMEOUT) if (value > TIMER_PRESSURE_TIMEOUT)
{ {
if(!(saved_curr_value[current_mode] == 0 && saved_set_value[current_mode] == 0)) { if (!(saved_curr_value[current_mode] == 0
SetState (&StateHandler::stateGetPressure); && saved_set_value[current_mode] == 0)
} && !sensor_mode)
{
SetState (&StateHandler::stateGetPressure);
}
sensor_timer += value; sensor_timer += value;
error_timer += value; error_timer += value;
state_timer->resetCounter (); 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->fan_speed.setInit (0);
this->value[(current_mode)].setInit (0); this->value[(current_mode)].setInit (0);
@ -305,9 +344,13 @@ StateHandler::pid ()
void void
StateHandler::updateSensorValues () StateHandler::updateSensorValues ()
{ {
sensors_data[TEMPERATURE] = humidity.readT (); if (!sensor_values_ready)
sensors_data[PRESSUREDAT] = _pressure->getPressure (); {
sensors_data[CO2] = co2.read (); sensors_data[TEMPERATURE] = humidity.readT ();
state_timer->tickCounter (5); sensors_data[PRESSUREDAT] = _pressure->getPressure ();
sensors_data[HUMIDITY] = humidity.readRH (); sensors_data[CO2] = co2.read ();
state_timer->tickCounter (5);
sensors_data[HUMIDITY] = humidity.readRH ();
sensor_values_ready = true;
}
} }

View File

@ -68,6 +68,10 @@ main (void)
DigitalIoPin b_toggle (0, 5, true, true, true); // A3 DigitalIoPin b_toggle (0, 5, true, true, true); // A3
SwitchController sw_toggle (&b_toggle, &ventMachine, SwitchController sw_toggle (&b_toggle, &ventMachine,
BUTTON_CONTROL_TOG_MODE); 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 */ /* Other declarations */
int getcounterValue; int getcounterValue;
while (1) while (1)
@ -76,6 +80,7 @@ main (void)
sw_up.listen (); sw_up.listen ();
sw_down.listen (); sw_down.listen ();
sw_toggle.listen (); sw_toggle.listen ();
sw_toggle_sens.listen();
ventMachine.HandleState (Event (Event::eTick, getcounterValue)); ventMachine.HandleState (Event (Event::eTick, getcounterValue));
glob_time.tickCounter (1); glob_time.tickCounter (1);
} }