state-handler: add timeout_error handling
This commit is contained in:
parent
942e87b37c
commit
a6d7bc0b27
@ -60,7 +60,8 @@ enum _mode
|
|||||||
{
|
{
|
||||||
MANUAL,
|
MANUAL,
|
||||||
AUTO,
|
AUTO,
|
||||||
SENSORS
|
SENSORS,
|
||||||
|
ERROR_TIMEOUT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum _sensors
|
enum _sensors
|
||||||
|
|||||||
@ -48,6 +48,12 @@ StateHandler::displaySet (size_t mode)
|
|||||||
snprintf (line_down, 16, "HUM:%02d CO2:%02d", sensors_data[HUMIDITY],
|
snprintf (line_down, 16, "HUM:%02d CO2:%02d", sensors_data[HUMIDITY],
|
||||||
sensors_data[CO2]);
|
sensors_data[CO2]);
|
||||||
break;
|
break;
|
||||||
|
case ERROR_TIMEOUT:
|
||||||
|
snprintf (line_up, 16, " FORCE STOP ", sensors_data[PRESSUREDAT],
|
||||||
|
sensors_data[TEMPERATURE]);
|
||||||
|
snprintf (line_down, 16, "REAS: TIMEOUT", sensors_data[HUMIDITY],
|
||||||
|
sensors_data[CO2]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -93,7 +99,6 @@ StateHandler::stateInit (const Event &event)
|
|||||||
case Event::eEnter:
|
case Event::eEnter:
|
||||||
break;
|
break;
|
||||||
case Event::eExit:
|
case Event::eExit:
|
||||||
_lcd->clear ();
|
|
||||||
break;
|
break;
|
||||||
case Event::eKey:
|
case Event::eKey:
|
||||||
handleControlButtons (event.value);
|
handleControlButtons (event.value);
|
||||||
@ -133,8 +138,15 @@ StateHandler::stateManual (const Event &event)
|
|||||||
if (event.value % 500 == 0)
|
if (event.value % 500 == 0)
|
||||||
{
|
{
|
||||||
SetState (&StateHandler::stateGetPressure);
|
SetState (&StateHandler::stateGetPressure);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (event.value < 0)
|
||||||
|
{
|
||||||
|
displaySet (ERROR_TIMEOUT);
|
||||||
|
fan_speed.setInit (0);
|
||||||
|
value[(current_mode)].setInit (0);
|
||||||
|
SetState (&StateHandler::stateInit);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +173,13 @@ StateHandler::stateAuto (const Event &event)
|
|||||||
{
|
{
|
||||||
SetState (&StateHandler::stateGetPressure);
|
SetState (&StateHandler::stateGetPressure);
|
||||||
}
|
}
|
||||||
|
if (event.value < 0)
|
||||||
|
{
|
||||||
|
displaySet (ERROR_TIMEOUT);
|
||||||
|
fan_speed.setInit (0);
|
||||||
|
value[(current_mode)].setInit (0);
|
||||||
|
SetState (&StateHandler::stateInit);
|
||||||
|
}
|
||||||
pid ();
|
pid ();
|
||||||
this->A01->write (fan_speed.getCurrent ());
|
this->A01->write (fan_speed.getCurrent ());
|
||||||
break;
|
break;
|
||||||
@ -199,10 +218,10 @@ StateHandler::handleControlButtons (uint8_t button)
|
|||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case BUTTON_CONTROL_DOWN:
|
case BUTTON_CONTROL_DOWN:
|
||||||
this->value[(current_mode) ? AUTO : MANUAL].dec ();
|
this->value[(current_mode)].dec ();
|
||||||
break;
|
break;
|
||||||
case BUTTON_CONTROL_UP:
|
case BUTTON_CONTROL_UP:
|
||||||
this->value[(current_mode) ? AUTO : MANUAL].inc ();
|
this->value[(current_mode)].inc ();
|
||||||
break;
|
break;
|
||||||
case BUTTON_CONTROL_TOG_MODE:
|
case BUTTON_CONTROL_TOG_MODE:
|
||||||
current_mode = !current_mode;
|
current_mode = !current_mode;
|
||||||
@ -235,7 +254,6 @@ StateHandler::fan_speed_normalized ()
|
|||||||
return speed * 10;
|
return speed * 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
StateHandler::pid ()
|
StateHandler::pid ()
|
||||||
{
|
{
|
||||||
@ -255,7 +273,6 @@ StateHandler::updateSensorValues ()
|
|||||||
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 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,19 +20,19 @@ extern "C"
|
|||||||
|
|
||||||
Timer::Timer (uint32_t freq) : freq (freq)
|
Timer::Timer (uint32_t freq) : freq (freq)
|
||||||
{
|
{
|
||||||
mode = true;
|
mode = true;
|
||||||
Chip_Clock_SetSysTickClockDiv (1);
|
Chip_Clock_SetSysTickClockDiv (1);
|
||||||
uint32_t sysTickRate = Chip_Clock_GetSysTickClockRate ();
|
uint32_t sysTickRate = Chip_Clock_GetSysTickClockRate ();
|
||||||
SysTick_Config (sysTickRate / freq);
|
SysTick_Config (sysTickRate / freq);
|
||||||
resetCounter();
|
resetCounter ();
|
||||||
timer = 0;
|
timer = 0;
|
||||||
systicks.store (0, std::memory_order_relaxed);
|
systicks.store (0, std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
Timer::Timer(bool mode)
|
Timer::Timer (bool mode)
|
||||||
{
|
{
|
||||||
this->mode = false;
|
this->mode = false;
|
||||||
resetCounter();
|
resetCounter ();
|
||||||
timer = 0;
|
timer = 0;
|
||||||
systicks.store (0, std::memory_order_relaxed);
|
systicks.store (0, std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
@ -47,9 +47,9 @@ Timer::tickCounter (int ms)
|
|||||||
{
|
{
|
||||||
if (counter >= INT_MAX)
|
if (counter >= INT_MAX)
|
||||||
{
|
{
|
||||||
resetCounter();
|
resetCounter ();
|
||||||
}
|
}
|
||||||
counter.fetch_add(ms, std::memory_order_relaxed);
|
counter.fetch_add (ms, std::memory_order_relaxed);
|
||||||
Sleep (ms);
|
Sleep (ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,5 +78,5 @@ Timer::resetCounter ()
|
|||||||
uint32_t
|
uint32_t
|
||||||
millis ()
|
millis ()
|
||||||
{
|
{
|
||||||
return systicks.load(std::memory_order_relaxed);
|
return systicks.load (std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,7 +82,12 @@ main (void)
|
|||||||
int getcounterValue = 0;
|
int getcounterValue = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
getcounterValue = glob_time.getCounter();
|
getcounterValue = glob_time.getCounter ();
|
||||||
|
if (getcounterValue > 15000)
|
||||||
|
{
|
||||||
|
glob_time.resetCounter ();
|
||||||
|
ventMachine.HandleState (Event (Event::eTick, -1));
|
||||||
|
}
|
||||||
sw_up.listen ();
|
sw_up.listen ();
|
||||||
sw_down.listen ();
|
sw_down.listen ();
|
||||||
sw_toggle.listen ();
|
sw_toggle.listen ();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user