/* * StateHandler.h * * Created on: Sep 21, 2022 * Author: tylen * * Purpose of this class is to store and pass * the events of the current mode to further process. * * Current goal is to make it to operate on interrupts * caused by button presses. * */ #ifndef STATE_HANDLER_H_ #define STATE_HANDLER_H_ <<<<<<< HEAD ======= #include "DigitalIoPin.h" #include "LiquidCrystal.h" >>>>>>> a6b953c51fc0a0204b4a5f881a975ec5e9842c6f #include "Counter.h" #include "DigitalIoPin.h" #include "Event.h" #include "LiquidCrystal.h" /** Buttons enumeration * * Current switch state is being passed * from main to StateHandler through * a keyEvent. Enumeration determines the state * of the particular button. * */ enum _buttons { /** Raises the bar up */ BUTTON_CONTROL_UP, /** Raises the bar down */ BUTTON_CONTROL_DOWN, /** Toggles the mode between auto and * manual, which changes the state */ BUTTON_CONTROL_TOG_MODE, /** Optional button to toggle the * activation of the current setting. * Not compulsory to be used. */ BUTTON_CONTROL_TOG_ACTIVE }; enum _bars { /** 0-100 % */ FAN_SPEED, /** 0-120 Pa */ PRESSURE }; enum _mode { MANUAL, AUTO }; class StateHandler; typedef void (StateHandler::*state_pointer) (const Event &); class StateHandler { public: StateHandler (LiquidCrystal *lcd); virtual ~StateHandler (); /** Get currently set pressure * * @return pressure in range of 0-120 */ unsigned int getSetPressure (); /** Get currently set FanSpeed * * @return speed in range of 0-100 */ unsigned int getSetSpeed (); /** Display values on LCD depending on current mode * * @param value1 value to be displayed on LCD line 0 * @param value2 value to be displayed on LCD line 1 */ void displaySet (unsigned int value1, unsigned int value2); /** Handle the given event of the current state * @param event event to be handled in the current state */ void HandleState (const Event &event); private: state_pointer current; /** Set a new curremt state * @param newstate new state to be set to current */ void SetState (state_pointer newstate); bool current_mode; Counter set[2] = { { 0, 100 }, { 0, 120 } }; LiquidCrystal *_lcd; /** Initialization state * * @param event event of the state */ void stateInit (const Event &event); /** Manual state * * - set current speed * - print current pressure * * @param event event of the state */ void stateManual (const Event &event); /** Automated state * * - print current pressure * - print set pressure * - inc/dec fan speed * * @param event */ void stateAuto (const Event &event); }; #endif /* STATE_HANDLER_H_ */