Merge state-handler: add proper way of non-blinking lcd from vas-dav/state-machine

state-handler: add proper way of non-blinking lcd
This commit is contained in:
Vasily Davydov 2022-10-16 15:21:44 +03:00 committed by GitHub
commit 5f5fcfe560
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 17 deletions

View File

@ -103,7 +103,8 @@ private:
void SetState (state_pointer newstate); void SetState (state_pointer newstate);
bool current_mode; bool current_mode;
Counter value[2] = { { 0, 100 }, { 0, 120 } }; Counter value[2] = { { 0, 100 }, { 0, 120 } };
int saved_set_value, saved_curr_value; int saved_set_value[2] = { 0, 0 };
int saved_curr_value[2] = { 0, 0 };
LiquidCrystal *_lcd; LiquidCrystal *_lcd;
/** Initialization state /** Initialization state
@ -136,6 +137,14 @@ private:
* @param button current button * @param button current button
*/ */
void handleControlButtons (uint8_t button); void handleControlButtons (uint8_t button);
/** Save values to class' varibales
*
* @param eventValue value coming from an event
* @param counterValue value of the inner Counter
* @param mode current mode
*/
void save (int eventValue, int counterValue, size_t mode);
}; };
#endif /* STATE_HANDLER_H_ */ #endif /* STATE_HANDLER_H_ */

View File

@ -13,8 +13,6 @@ StateHandler::StateHandler (LiquidCrystal *lcd)
current = &StateHandler::stateInit; current = &StateHandler::stateInit;
(this->*current) (Event (Event::eEnter)); (this->*current) (Event (Event::eEnter));
current_mode = MANUAL; current_mode = MANUAL;
saved_set_value = 0;
saved_curr_value = 0;
} }
StateHandler::~StateHandler () StateHandler::~StateHandler ()
@ -112,13 +110,7 @@ StateHandler::stateManual (const Event &event)
handleControlButtons (event.value); handleControlButtons (event.value);
break; break;
case Event::eTick: case Event::eTick:
if (saved_curr_value != event.value save (event.value, value[MANUAL].getCurrent (), MANUAL);
|| saved_set_value != value[MANUAL].getCurrent ())
{
saved_curr_value = event.value;
saved_set_value = value[MANUAL].getCurrent ();
displaySet (value[MANUAL].getCurrent (), event.value);
}
break; break;
} }
} }
@ -137,13 +129,7 @@ StateHandler::stateAuto (const Event &event)
handleControlButtons (event.value); handleControlButtons (event.value);
break; break;
case Event::eTick: case Event::eTick:
if (saved_curr_value != event.value save (event.value, value[AUTO].getCurrent (), AUTO);
|| saved_set_value != value[AUTO].getCurrent ())
{
saved_curr_value = event.value;
saved_set_value = value[AUTO].getCurrent ();
displaySet (value[AUTO].getCurrent (), event.value);
}
break; break;
} }
} }
@ -167,3 +153,15 @@ StateHandler::handleControlButtons (uint8_t button)
break; break;
} }
} }
void
StateHandler::save (int eventValue, int counterValue, size_t mode)
{
if (saved_curr_value[mode] != eventValue
|| saved_set_value[mode] != counterValue)
{
saved_curr_value[mode] = eventValue;
saved_set_value[mode] = counterValue;
displaySet (counterValue, eventValue);
}
}