Handle rotary encoder connected to two pins. With interrupt. Operating encoder changes an int position value that can be polled.
Dependents: encoder_test distance_measure speed_measure straight_speed_control ... more
Diff: CRotaryEncoder.h
- Revision:
- 0:56f636261771
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CRotaryEncoder.h Tue Nov 09 20:14:32 2010 +0000 @@ -0,0 +1,61 @@ +#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. + * + */ + + + +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; } + + private: + InterruptIn *m_pinA; + DigitalIn *m_pinB; + volatile int m_position; + + void rise(void); + void fall(void); + + +}; + + +#endif