state-handler: fix button delay

This commit is contained in:
Vasily Davydov 2022-10-27 14:25:06 +03:00
parent 2bef3ce8c0
commit 58dbbf0f06
2 changed files with 42 additions and 13 deletions

View File

@ -185,13 +185,20 @@ private:
*/
void handleTickValue (int value);
/** Save values to class' varibales
/** Save pressure values to class' varibales
*
* @param eventValue value coming from an event
* @param counterValue value of the inner Counter
* @param pressure current pressure
* @param mode current mode
*/
void save (int eventValue, size_t mode);
void savePressureAndDisplay (int pressure, size_t mode);
/** Save set values to class' varibales
*
* @param mode current mode
* @return true if saved
* @return false if not saved
*/
bool saveSetAndDisplay (size_t mode);
/** Calculates pid for fan control value
*

View File

@ -120,7 +120,8 @@ StateHandler::stateManual (const Event &event)
switch (event.type)
{
case Event::eEnter:
this->_propeller->spin (fan_speed.getCurrent ());
displaySet(MANUAL);
// this->_propeller->spin (fan_speed.getCurrent ());
break;
case Event::eExit:
break;
@ -139,7 +140,8 @@ StateHandler::stateAuto (const Event &event)
switch (event.type)
{
case Event::eEnter:
this->_propeller->spin (fan_speed.getCurrent ());
displaySet(AUTO);
// this->_propeller->spin (fan_speed.getCurrent ());
break;
case Event::eExit:
break;
@ -173,7 +175,8 @@ StateHandler::stateGetPressure (const Event &event)
_pressure->wakeUp ();
break;
}
save (_pressure->getPressure (), ((current_mode) ? AUTO : MANUAL));
savePressureAndDisplay (_pressure->getPressure (),
((current_mode) ? AUTO : MANUAL));
SetState (current_mode ? &StateHandler::stateAuto
: &StateHandler::stateManual);
break;
@ -194,10 +197,19 @@ StateHandler::handleControlButtons (uint8_t button)
case BUTTON_CONTROL_TOG_MODE:
current_mode = !current_mode;
SetState (&StateHandler::stateInit);
return;
break;
default:
break;
}
if (current_mode == MANUAL && saveSetAndDisplay (MANUAL))
{
this->_propeller->spin (getSetSpeed () * 10);
}
else
{
saveSetAndDisplay (AUTO);
}
}
void
@ -206,7 +218,7 @@ StateHandler::handleTickValue (int value)
if (value % TIMER_SENSORS_TIMEOUT == 0)
{
updateSensorValues ();
displaySet (SENSORS);
// displaySet (SENSORS);
}
if (value % TIMER_PRESSURE_TIMEOUT == 0)
{
@ -222,16 +234,26 @@ StateHandler::handleTickValue (int value)
}
void
StateHandler::save (int eventValue, size_t mode)
StateHandler::savePressureAndDisplay (int pressure, size_t mode)
{
if (saved_curr_value[mode] != pressure)
{
saved_curr_value[mode] = pressure;
displaySet (mode);
}
}
bool
StateHandler::saveSetAndDisplay (size_t mode)
{
int counterValue = value[mode].getCurrent ();
if (saved_curr_value[mode] != eventValue
|| saved_set_value[mode] != counterValue)
if (saved_set_value[mode] != counterValue)
{
saved_curr_value[mode] = eventValue;
saved_set_value[mode] = counterValue;
displaySet ((current_mode) ? AUTO : MANUAL);
displaySet (mode);
return true;
}
return false;
}
int