main: add sensors display with A2 switch
This commit is contained in:
parent
759bc5034f
commit
c7ed343fa2
@ -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
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
|
||||
@ -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);
|
||||
@ -304,10 +343,14 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user