Rotary Encoder handling library for mbed

Dependents:   MIDI_CW Gemphet8

Committer:
ChuckTimber
Date:
Wed Aug 06 23:54:19 2014 +0000
Revision:
3:9dfe441065e9
Parent:
2:46173a05338e
Child:
4:916992052518
changed parameter name

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 3:9dfe441065e9 31 * if (renc.CMD == CLOCKWISE) {
ChuckTimber 1:2732adb68dad 32 * proc_REnc_right();
ChuckTimber 1:2732adb68dad 33 * renc.CMD = STOP;
ChuckTimber 3:9dfe441065e9 34 * } else if (renc.CMD == COUNTERCLOCKWISE) {
ChuckTimber 1:2732adb68dad 35 * proc_REnc_left();
ChuckTimber 1:2732adb68dad 36 * renc.CMD = STOP;
ChuckTimber 1:2732adb68dad 37 * }
ChuckTimber 3:9dfe441065e9 38 * if (renc.STABLE) {
ChuckTimber 3:9dfe441065e9 39 * // do_something
ChuckTimber 3:9dfe441065e9 40 * }
ChuckTimber 1:2732adb68dad 41 * }
ChuckTimber 1:2732adb68dad 42 * }
ChuckTimber 0:c905f9e6866f 43 * @endcode
ChuckTimber 0:c905f9e6866f 44 */
ChuckTimber 0:c905f9e6866f 45
ChuckTimber 2:46173a05338e 46 #define RENC_SAMPLING_PERIOD 0.002
ChuckTimber 2:46173a05338e 47 #define RENC_EXECUTION_DELAY 300
ChuckTimber 0:c905f9e6866f 48
ChuckTimber 0:c905f9e6866f 49 namespace mbed {
ChuckTimber 0:c905f9e6866f 50
ChuckTimber 3:9dfe441065e9 51 enum { STOP, CLOCKWISE, COUNTERCLOCKWISE };
ChuckTimber 0:c905f9e6866f 52
ChuckTimber 1:2732adb68dad 53 /** class to handle a rotary encoder
ChuckTimber 1:2732adb68dad 54 * The class uses DigitalIn and Ticker
ChuckTimber 0:c905f9e6866f 55 */
ChuckTimber 0:c905f9e6866f 56 class REnc {
ChuckTimber 0:c905f9e6866f 57
ChuckTimber 0:c905f9e6866f 58 public:
ChuckTimber 0:c905f9e6866f 59 unsigned char CMD;
ChuckTimber 1:2732adb68dad 60 unsigned char STABLE;
ChuckTimber 0:c905f9e6866f 61 void setHandleRight(void (*fptr)(void));
ChuckTimber 0:c905f9e6866f 62 void setHandleLeft(void (*fptr)(void));
ChuckTimber 0:c905f9e6866f 63
ChuckTimber 0:c905f9e6866f 64 REnc(PinName pina, PinName pinb);
ChuckTimber 0:c905f9e6866f 65
ChuckTimber 0:c905f9e6866f 66 private:
ChuckTimber 0:c905f9e6866f 67 void sample_encoder(void);
ChuckTimber 0:c905f9e6866f 68 void (*mRightCallback)(void);
ChuckTimber 0:c905f9e6866f 69 void (*mLeftCallback)(void);
ChuckTimber 0:c905f9e6866f 70
ChuckTimber 0:c905f9e6866f 71 DigitalIn _pina;
ChuckTimber 0:c905f9e6866f 72 DigitalIn _pinb;
ChuckTimber 0:c905f9e6866f 73 Ticker _tick;
ChuckTimber 0:c905f9e6866f 74
ChuckTimber 0:c905f9e6866f 75 }; /* end of REnc class definition */
ChuckTimber 0:c905f9e6866f 76
ChuckTimber 0:c905f9e6866f 77 } /* end of namespace mbed */
ChuckTimber 0:c905f9e6866f 78 #endif