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); void handleTickValue (int value);
/** Save values to class' varibales /** Save pressure values to class' varibales
* *
* @param eventValue value coming from an event * @param pressure current pressure
* @param counterValue value of the inner Counter
* @param mode current mode * @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 /** Calculates pid for fan control value
* *

View File

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