Rotary Encoder handling library for mbed

Dependents:   MIDI_CW Gemphet8

Committer:
ChuckTimber
Date:
Wed Aug 06 06:35:47 2014 +0000
Revision:
1:2732adb68dad
Parent:
0:c905f9e6866f
Child:
2:46173a05338e
Fixed description, added delayed on functionality.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChuckTimber 0:c905f9e6866f 1 #ifndef MBED_RENC_H
ChuckTimber 0:c905f9e6866f 2 #define MBED_RENC_H
ChuckTimber 0:c905f9e6866f 3
ChuckTimber 0:c905f9e6866f 4 #include "mbed.h"
ChuckTimber 0:c905f9e6866f 5
ChuckTimber 1:2732adb68dad 6 /** class to handle a rotary encoder
ChuckTimber 1:2732adb68dad 7 * The class use DigitalIn and Ticker
ChuckTimber 1:2732adb68dad 8 *
ChuckTimber 1:2732adb68dad 9 * Refered to: http://elm-chan.org/docs/tec/te04.html
ChuckTimber 0:c905f9e6866f 10 *
ChuckTimber 0:c905f9e6866f 11 * Example:
ChuckTimber 0:c905f9e6866f 12 * @code
ChuckTimber 1:2732adb68dad 13 * // REnc sample
ChuckTimber 1:2732adb68dad 14 * #include "mbed.h"
ChuckTimber 1:2732adb68dad 15 * #include "REnc.h"
ChuckTimber 1:2732adb68dad 16 * void proc_REnc_right(void);
ChuckTimber 1:2732adb68dad 17 * void proc_REnc_left(void);
ChuckTimber 1:2732adb68dad 18 *
ChuckTimber 1:2732adb68dad 19 * // void proc_REnc_right(void) { }
ChuckTimber 1:2732adb68dad 20 * // void proc_REnc_left(void) { }
ChuckTimber 1:2732adb68dad 21 *
ChuckTimber 1:2732adb68dad 22 * REnc renc(dp1, dp2);
ChuckTimber 1:2732adb68dad 23 *
ChuckTimber 1:2732adb68dad 24 * int main()
ChuckTimber 1:2732adb68dad 25 * {
ChuckTimber 1:2732adb68dad 26 *
ChuckTimber 1:2732adb68dad 27 * // renc.setHandleRight(&proc_REnc_right);
ChuckTimber 1:2732adb68dad 28 * // renc.setHandleLeft(&proc_REnc_left);
ChuckTimber 1:2732adb68dad 29 *
ChuckTimber 1:2732adb68dad 30 * while(1) {
ChuckTimber 1:2732adb68dad 31 * if (renc.CMD == FORWARD) {
ChuckTimber 1:2732adb68dad 32 * proc_REnc_right();
ChuckTimber 1:2732adb68dad 33 * renc.CMD = STOP;
ChuckTimber 1:2732adb68dad 34 * } else if (renc.CMD == REVERSE) {
ChuckTimber 1:2732adb68dad 35 * proc_REnc_left();
ChuckTimber 1:2732adb68dad 36 * renc.CMD = STOP;
ChuckTimber 1:2732adb68dad 37 * }
ChuckTimber 1:2732adb68dad 38 * }
ChuckTimber 1:2732adb68dad 39 * }
ChuckTimber 0:c905f9e6866f 40 * @endcode
ChuckTimber 0:c905f9e6866f 41 */
ChuckTimber 0:c905f9e6866f 42
ChuckTimber 0:c905f9e6866f 43
ChuckTimber 0:c905f9e6866f 44 namespace mbed {
ChuckTimber 0:c905f9e6866f 45
ChuckTimber 1:2732adb68dad 46 enum { STOP, FORWARD, REVERSE };
ChuckTimber 0:c905f9e6866f 47
ChuckTimber 1:2732adb68dad 48 /** class to handle a rotary encoder
ChuckTimber 1:2732adb68dad 49 * The class uses DigitalIn and Ticker
ChuckTimber 0:c905f9e6866f 50 */
ChuckTimber 0:c905f9e6866f 51 class REnc {
ChuckTimber 0:c905f9e6866f 52
ChuckTimber 0:c905f9e6866f 53 public:
ChuckTimber 0:c905f9e6866f 54 unsigned char CMD;
ChuckTimber 1:2732adb68dad 55 unsigned char STABLE;
ChuckTimber 0:c905f9e6866f 56 void setHandleRight(void (*fptr)(void));
ChuckTimber 0:c905f9e6866f 57 void setHandleLeft(void (*fptr)(void));
ChuckTimber 0:c905f9e6866f 58
ChuckTimber 0:c905f9e6866f 59 REnc(PinName pina, PinName pinb);
ChuckTimber 0:c905f9e6866f 60
ChuckTimber 0:c905f9e6866f 61 private:
ChuckTimber 0:c905f9e6866f 62 void sample_encoder(void);
ChuckTimber 0:c905f9e6866f 63 void (*mRightCallback)(void);
ChuckTimber 0:c905f9e6866f 64 void (*mLeftCallback)(void);
ChuckTimber 0:c905f9e6866f 65
ChuckTimber 0:c905f9e6866f 66 DigitalIn _pina;
ChuckTimber 0:c905f9e6866f 67 DigitalIn _pinb;
ChuckTimber 0:c905f9e6866f 68 Ticker _tick;
ChuckTimber 0:c905f9e6866f 69
ChuckTimber 0:c905f9e6866f 70 }; /* end of REnc class definition */
ChuckTimber 0:c905f9e6866f 71
ChuckTimber 0:c905f9e6866f 72 } /* end of namespace mbed */
ChuckTimber 0:c905f9e6866f 73 #endif