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

Committer:
Raabinator
Date:
Tue Nov 09 20:14:32 2010 +0000
Revision:
0:56f636261771
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Raabinator 0:56f636261771 1 #ifndef CROTENC_H_INCLUDED
Raabinator 0:56f636261771 2 #define CROTENC_H_INCLUDED
Raabinator 0:56f636261771 3
Raabinator 0:56f636261771 4 #include "mbed.h"
Raabinator 0:56f636261771 5
Raabinator 0:56f636261771 6
Raabinator 0:56f636261771 7 /* This Class handles a rotary encoder like the one from Pollin electronic (Panasonic EVEP...).
Raabinator 0:56f636261771 8 * It uses two pins, one creating an interrupt on change.
Raabinator 0:56f636261771 9 * Rotation direction is determined by checking the state of the other pin.
Raabinator 0:56f636261771 10 *
Raabinator 0:56f636261771 11 * Operating the encoder changes an internal integer value that can be read
Raabinator 0:56f636261771 12 * by Get() or the operator int() functions.
Raabinator 0:56f636261771 13 * A new value can be set by Set(value) or opperator=.
Raabinator 0:56f636261771 14 *
Raabinator 0:56f636261771 15 * Autor: Thomas Raab (Raabinator)
Raabinator 0:56f636261771 16 *
Raabinator 0:56f636261771 17 * Dent steady point ! ! !
Raabinator 0:56f636261771 18 * +-----+ +-----+
Raabinator 0:56f636261771 19 * pinA (interrupt) | | | |
Raabinator 0:56f636261771 20 * --+ +-----+ +---
Raabinator 0:56f636261771 21 * +-----+ +-----+
Raabinator 0:56f636261771 22 * pinB | | | |
Raabinator 0:56f636261771 23 * ----+ +-----+ +-
Raabinator 0:56f636261771 24 * --> C.W
Raabinator 0:56f636261771 25 * CW: increases position value
Raabinator 0:56f636261771 26 * CCW: decreases position value
Raabinator 0:56f636261771 27 *
Raabinator 0:56f636261771 28 * changelog:
Raabinator 0:56f636261771 29 *
Raabinator 0:56f636261771 30 * 09. Nov. 2010
Raabinator 0:56f636261771 31 * First version published.
Raabinator 0:56f636261771 32 *
Raabinator 0:56f636261771 33 */
Raabinator 0:56f636261771 34
Raabinator 0:56f636261771 35
Raabinator 0:56f636261771 36
Raabinator 0:56f636261771 37 class CRotaryEncoder
Raabinator 0:56f636261771 38 {
Raabinator 0:56f636261771 39 public:
Raabinator 0:56f636261771 40 CRotaryEncoder(PinName pinA, PinName pinB);
Raabinator 0:56f636261771 41 ~CRotaryEncoder();
Raabinator 0:56f636261771 42
Raabinator 0:56f636261771 43 int Get(void);
Raabinator 0:56f636261771 44 inline operator int() { return Get(); }
Raabinator 0:56f636261771 45
Raabinator 0:56f636261771 46 void Set(int value);
Raabinator 0:56f636261771 47 inline CRotaryEncoder& operator= ( int value ) { Set(value); return *this; }
Raabinator 0:56f636261771 48
Raabinator 0:56f636261771 49 private:
Raabinator 0:56f636261771 50 InterruptIn *m_pinA;
Raabinator 0:56f636261771 51 DigitalIn *m_pinB;
Raabinator 0:56f636261771 52 volatile int m_position;
Raabinator 0:56f636261771 53
Raabinator 0:56f636261771 54 void rise(void);
Raabinator 0:56f636261771 55 void fall(void);
Raabinator 0:56f636261771 56
Raabinator 0:56f636261771 57
Raabinator 0:56f636261771 58 };
Raabinator 0:56f636261771 59
Raabinator 0:56f636261771 60
Raabinator 0:56f636261771 61 #endif