state-handler: stateAuto operational with working pid() displaySens() to show sensors reading on LCD

This commit is contained in:
Evgenii Meshcheriakov 2022-10-25 14:18:45 +03:00
parent 1db8da098d
commit 893a41a7d7
2 changed files with 61 additions and 36 deletions

View File

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

View File

@ -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 ()
@ -81,7 +97,7 @@ StateHandler::stateInit (const Event &event)
switch (event.type) switch (event.type)
{ {
case Event::eEnter: case Event::eEnter:
// SetState (&StateHandler::stateSensors); // SetState (&StateHandler::stateSensors);
break; break;
case Event::eExit: case Event::eExit:
_lcd->clear (); _lcd->clear ();
@ -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:
SetState (&StateHandler::stateGetPressure); if (event.value % 2 == 0)
if (saved_curr_value[AUTO] < saved_set_value[AUTO]) {
{ SetState (&StateHandler::stateGetPressure);
fan_speed.inc (); // state_timer->resetCounter ();
// break;
}
if(event.value % 153 == 0) {
SetState(&StateHandler::stateSensors);
// displaySens ();
}
pid();
this->A01->write (fan_speed.getCurrent ()); this->A01->write (fan_speed.getCurrent ());
} // if (saved_curr_value[AUTO] < saved_set_value[AUTO])
else if (saved_curr_value[AUTO] > saved_set_value[AUTO]) // {
{ // fan_speed.inc ();
fan_speed.dec (); // this->A01->write (fan_speed.getCurrent ());
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;