Charles Young's development fork. Going forward I only want to push mature code to main repository.
Fork of GEO_COUNTER_L432KC by
RotarySwitch.hpp
- Committer:
- Charles David Young
- Date:
- 2018-09-04
- Revision:
- 19:fd3e33641aa7
- Child:
- 20:fb73eaaf0894
File content as of revision 19:fd3e33641aa7:
/** * @author Charles Young * This class encapsulates the behavior of the rotary switch to change modes */ #ifndef RotarySwitch_H #define RotarySwitch_H /** * Includes */ #include "mbed.h" #include "QEI.h" // Quadrature Encoder functions /** * Quadrature Encoder Interface. */ class RotarySwitch { public: /** * Constructor. * * @param channelA mbed pin for channel A input. * @param channelB mbed pin for channel B input. */ RotarySwitch(PinName channelA, PinName channelB); /** * Reset the encoder. * * Sets the pulses and revolutions count to zero. */ void GetPosition(void); private: PinName channelA_; PinName channelB_; Ticker SecTenth_Beat; // .1 second ticker Ticker Sec_Beat; // 1 second ticker /** * Defines */ #define CPM 0x01 #define CPS 0x02 #define PLS 0x04 #define VOLTS 0x08 #define CNT1 0x10 #define CNT2 0x20 #define HV 0x40 #define MENU 0x80 uint8_t LED_statuses[] = {CPM, CPS, PLS, VOLTS, CNT1, CNT2, HV, MENU}; uint8_t LED_status = CPM; uint8_t LED_status_index = 0; DigitalIn QEPB (D9); // Quadrature encoder pushbutton // QEI class supports the mode wheel. In its most basic function it will tell // us which direction the wheel is moving (right or left) so that we can // use it to select the current mode. QEI Wheel(D12, D11, NC, 16); // Quadrature encoder int WheelCurrent = 0; int WheelPrevious = 0; bool QEPBpressed = false; // only react to button when pressed int WheelStateTimer = 0; const int WheelStateTimeout = 5; //timeout for wheel button pushed enum WheelState { WHEEL_INACTIVE = 0, WHEEL_MODE_SELECT = 1, WHEEL_SUBMODE_SELECT = 2 }; enum WheelStateEvent { WHEEL_Pressed = 0, WHEEL_Timeout = 1 }; WheelState currentWheelState; /** * Update the pulse count. * * Called on every rising/falling edge of channels A/B. * * Reads the state of the channels and determines whether a pulse forward * or backward has occured, updating the count appropriately. */ void WheelStateMachine(WheelStateEvent event); void RotatySwitch::UpdateOutput(); void RotatySwitch::UpdateInput(); }; #endif /* RotarySwitch_H */