state-handler: stateAuto operational with working pid() displaySens() to show sensors reading on LCD
This commit is contained in:
parent
1db8da098d
commit
893a41a7d7
@ -104,6 +104,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
void displaySet (unsigned int value1, unsigned int value2);
|
void displaySet (unsigned int value1, unsigned int value2);
|
||||||
|
|
||||||
|
/** Display values of sensors readings on LCD
|
||||||
|
* needed only for Debug purposes
|
||||||
|
* can be removed in production
|
||||||
|
*/
|
||||||
|
void displaySens ();
|
||||||
|
|
||||||
/** Handle the given event of the current state
|
/** Handle the given event of the current state
|
||||||
*
|
*
|
||||||
* @param event event to be handled in the current state
|
* @param event event to be handled in the current state
|
||||||
|
|||||||
@ -48,6 +48,22 @@ StateHandler::displaySet (unsigned int value1, unsigned int value2)
|
|||||||
_lcd->setCursor (0, 1);
|
_lcd->setCursor (0, 1);
|
||||||
_lcd->print (line_down);
|
_lcd->print (line_down);
|
||||||
}
|
}
|
||||||
|
void
|
||||||
|
StateHandler::displaySens ()
|
||||||
|
{
|
||||||
|
char line_up[16] = { 0 };
|
||||||
|
char line_down[16] = { 0 };
|
||||||
|
snprintf (line_up, 16, "PRE:%02d TEM:%02d", sensors_data[PRESSUREDAT],
|
||||||
|
sensors_data[TEMPERATURE]);
|
||||||
|
snprintf (line_down, 16, "HUM:%02d CO2:%02d", sensors_data[HUMIDITY],
|
||||||
|
sensors_data[CO2]);
|
||||||
|
|
||||||
|
_lcd->clear ();
|
||||||
|
_lcd->setCursor (0, 0);
|
||||||
|
_lcd->print (line_up);
|
||||||
|
_lcd->setCursor (0, 1);
|
||||||
|
_lcd->print (line_down);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
StateHandler::getSetPressure ()
|
StateHandler::getSetPressure ()
|
||||||
@ -116,10 +132,14 @@ StateHandler::stateManual (const Event &event)
|
|||||||
handleControlButtons (event.value);
|
handleControlButtons (event.value);
|
||||||
break;
|
break;
|
||||||
case Event::eTick:
|
case Event::eTick:
|
||||||
if (event.value > 500)
|
if(event.value % 5000 == 0) {
|
||||||
|
SetState(&StateHandler::stateSensors);
|
||||||
|
// displaySens ();
|
||||||
|
}
|
||||||
|
if (event.value % 500 == 0)
|
||||||
{
|
{
|
||||||
SetState (&StateHandler::stateGetPressure);
|
SetState (&StateHandler::stateGetPressure);
|
||||||
state_timer->resetCounter ();
|
// state_timer->resetCounter ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,26 +151,36 @@ StateHandler::stateAuto (const Event &event)
|
|||||||
switch (event.type)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case Event::eEnter:
|
case Event::eEnter:
|
||||||
displaySet (saved_set_value[AUTO], saved_curr_value[AUTO]);
|
this->A01->write (fan_speed.getCurrent ());
|
||||||
break;
|
break;
|
||||||
case Event::eExit:
|
case Event::eExit:
|
||||||
_lcd->clear ();
|
|
||||||
break;
|
break;
|
||||||
case Event::eKey:
|
case Event::eKey:
|
||||||
handleControlButtons (event.value);
|
handleControlButtons (event.value);
|
||||||
break;
|
break;
|
||||||
case Event::eTick:
|
case Event::eTick:
|
||||||
|
if (event.value % 2 == 0)
|
||||||
|
{
|
||||||
SetState (&StateHandler::stateGetPressure);
|
SetState (&StateHandler::stateGetPressure);
|
||||||
if (saved_curr_value[AUTO] < saved_set_value[AUTO])
|
// state_timer->resetCounter ();
|
||||||
{
|
// break;
|
||||||
fan_speed.inc ();
|
|
||||||
this->A01->write (fan_speed.getCurrent ());
|
|
||||||
}
|
}
|
||||||
else if (saved_curr_value[AUTO] > saved_set_value[AUTO])
|
if(event.value % 153 == 0) {
|
||||||
{
|
SetState(&StateHandler::stateSensors);
|
||||||
fan_speed.dec ();
|
// displaySens ();
|
||||||
this->A01->write (fan_speed.getCurrent ());
|
|
||||||
}
|
}
|
||||||
|
pid();
|
||||||
|
this->A01->write (fan_speed.getCurrent ());
|
||||||
|
// if (saved_curr_value[AUTO] < saved_set_value[AUTO])
|
||||||
|
// {
|
||||||
|
// fan_speed.inc ();
|
||||||
|
// this->A01->write (fan_speed.getCurrent ());
|
||||||
|
// }
|
||||||
|
// else if (saved_curr_value[AUTO] > saved_set_value[AUTO])
|
||||||
|
// {
|
||||||
|
// fan_speed.dec ();
|
||||||
|
// this->A01->write (fan_speed.getCurrent ());
|
||||||
|
// }
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,30 +191,19 @@ StateHandler::stateSensors (const Event &event)
|
|||||||
switch (event.type)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case Event::eEnter:
|
case Event::eEnter:
|
||||||
break;
|
|
||||||
case Event::eExit:
|
|
||||||
break;
|
|
||||||
case Event::eKey:
|
|
||||||
break;
|
|
||||||
case Event::eTick:
|
|
||||||
sensors_data[PRESSUREDAT] = pressure->getPressure ();
|
sensors_data[PRESSUREDAT] = pressure->getPressure ();
|
||||||
sensors_data[TEMPERATURE] = humidity.readT ();
|
sensors_data[TEMPERATURE] = humidity.readT ();
|
||||||
sensors_data[HUMIDITY] = humidity.readRH ();
|
sensors_data[HUMIDITY] = humidity.readRH ();
|
||||||
sensors_data[CO2] = co2.read ();
|
sensors_data[CO2] = co2.read ();
|
||||||
#if 1
|
// displaySens ();
|
||||||
char line_up[16] = { 0 };
|
break;
|
||||||
char line_down[16] = { 0 };
|
case Event::eExit:
|
||||||
snprintf (line_up, 16, "PRE:%02d TEM:%02d", sensors_data[PRESSUREDAT],
|
break;
|
||||||
sensors_data[TEMPERATURE]);
|
case Event::eKey:
|
||||||
snprintf (line_down, 16, "HUM:%02d CO2:%02d", sensors_data[HUMIDITY],
|
handleControlButtons (event.value);
|
||||||
sensors_data[CO2]);
|
break;
|
||||||
|
case Event::eTick:
|
||||||
_lcd->clear ();
|
// save (pressure->getPressure (), ((current_mode) ? AUTO : MANUAL));
|
||||||
_lcd->setCursor (0, 0);
|
|
||||||
_lcd->print (line_up);
|
|
||||||
_lcd->setCursor (0, 1);
|
|
||||||
_lcd->print (line_down);
|
|
||||||
#endif
|
|
||||||
SetState (current_mode ? &StateHandler::stateAuto
|
SetState (current_mode ? &StateHandler::stateAuto
|
||||||
: &StateHandler::stateManual);
|
: &StateHandler::stateManual);
|
||||||
break;
|
break;
|
||||||
@ -261,7 +280,7 @@ StateHandler::fan_speed_normalized() {
|
|||||||
void
|
void
|
||||||
StateHandler::pid ()
|
StateHandler::pid ()
|
||||||
{
|
{
|
||||||
float kP = 0.1, kI = 0.01, kD = 0.01;
|
float kP = 1.0, kI = 0.1, kD = 0.125;
|
||||||
int error = 0, last_error = 0, derivative = 0;
|
int error = 0, last_error = 0, derivative = 0;
|
||||||
error = saved_set_value[AUTO] - saved_curr_value[AUTO];
|
error = saved_set_value[AUTO] - saved_curr_value[AUTO];
|
||||||
last_error = error;
|
last_error = error;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user