Alvaro Cassinelli
/
skinGames_II
save loops
Diff: hardwareIO/CRotaryEncoder.h
- Revision:
- 0:df6fdd9b99f0
diff -r 000000000000 -r df6fdd9b99f0 hardwareIO/CRotaryEncoder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hardwareIO/CRotaryEncoder.h Tue Dec 02 04:39:15 2014 +0000 @@ -0,0 +1,73 @@ +#ifndef CROTENC_H_INCLUDED +#define CROTENC_H_INCLUDED + +#include "mbed.h" + + +/* This Class handles a rotary encoder like the one from Pollin electronic (Panasonic EVEP...). + * It uses two pins, one creating an interrupt on change. + * Rotation direction is determined by checking the state of the other pin. + * + * Operating the encoder changes an internal integer value that can be read + * by Get() or the operator int() functions. + * A new value can be set by Set(value) or opperator=. + * + * Autor: Thomas Raab (Raabinator) + * + * Dent steady point ! ! ! + * +-----+ +-----+ + * pinA (interrupt) | | | | + * --+ +-----+ +--- + * +-----+ +-----+ + * pinB | | | | + * ----+ +-----+ +- + * --> C.W + * CW: increases position value + * CCW: decreases position value + * + * changelog: + * + * 09. Nov. 2010 + * First version published. + * + */ + +#define ROTARY_ENCODER1_PINA p21 +#define ROTARY_ENCODER1_PINB p22 + +#define ROTARY_ENCODER2_PINA p26 +#define ROTARY_ENCODER2_PINB p27 + +class CRotaryEncoder +{ + public: + CRotaryEncoder(PinName pinA, PinName pinB); + ~CRotaryEncoder(); + + int Get(void); + inline operator int() { return Get(); } + + void Set(int value); + inline CRotaryEncoder& operator= ( int value ) { Set(value); return *this; } + + void SetMinMax(int min, int max); + + bool CheckNew(); + + private: + void wrapValue(); + InterruptIn *m_pinA; + DigitalIn *m_pinB; + volatile int m_position, maxValue, minValue; + volatile bool newValue; + + void rise(void); + void fall(void); + + +}; + +extern CRotaryEncoder rotaryEncoder1; +extern CRotaryEncoder rotaryEncoder2; + +#endif