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
|
/** 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
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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,7 +151,8 @@ 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 ();
|
pid ();
|
||||||
this->_propeller->spin (fan_speed.getCurrent ());
|
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
|
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
|
||||||
|
&& saved_set_value[current_mode] == 0)
|
||||||
|
&& !sensor_mode)
|
||||||
|
{
|
||||||
SetState (&StateHandler::stateGetPressure);
|
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 ()
|
||||||
{
|
{
|
||||||
|
if (!sensor_values_ready)
|
||||||
|
{
|
||||||
sensors_data[TEMPERATURE] = humidity.readT ();
|
sensors_data[TEMPERATURE] = humidity.readT ();
|
||||||
sensors_data[PRESSUREDAT] = _pressure->getPressure ();
|
sensors_data[PRESSUREDAT] = _pressure->getPressure ();
|
||||||
sensors_data[CO2] = co2.read ();
|
sensors_data[CO2] = co2.read ();
|
||||||
state_timer->tickCounter (5);
|
state_timer->tickCounter (5);
|
||||||
sensors_data[HUMIDITY] = humidity.readRH ();
|
sensors_data[HUMIDITY] = humidity.readRH ();
|
||||||
|
sensor_values_ready = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user