Alvaro Cassinelli
/
skinGames_II
save loops
hardwareIO/CRotaryEncoder.h
- Committer:
- mbedalvaro
- Date:
- 2014-12-02
- Revision:
- 0:df6fdd9b99f0
File content as of revision 0:df6fdd9b99f0:
#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