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
* 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

View File

@ -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,
};

View File

@ -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,7 +151,8 @@ StateHandler::stateAuto (const Event &event)
break;
case Event::eTick:
handleTickValue (event.value);
if(saved_set_value[AUTO]){
if (saved_set_value[AUTO])
{
pid ();
this->_propeller->spin (fan_speed.getCurrent ());
}
@ -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)) {
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 ()
{
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;
}
}

View File

@ -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);
}