Rotary Encoder handling library for mbed
REnc.h@3:9dfe441065e9, 2014-08-06 (annotated)
- 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?
User | Revision | Line number | New 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 |