Rotary Encoder handling library for mbed
REnc.h@6:abd0d8d58fed, 2014-08-12 (annotated)
- Committer:
- ChuckTimber
- Date:
- Tue Aug 12 02:59:22 2014 +0000
- Revision:
- 6:abd0d8d58fed
- Parent:
- 5:3e6931797218
Rotary Encoder handling library for mbed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ChuckTimber | 4:916992052518 | 1 | /** |
ChuckTimber | 4:916992052518 | 2 | * @file REnc.h |
ChuckTimber | 4:916992052518 | 3 | * Project Rotary Encoder handling Library |
ChuckTimber | 4:916992052518 | 4 | * @brief Rotary Encoder handling library for mbed |
ChuckTimber | 4:916992052518 | 5 | * @version 1.0 |
ChuckTimber | 4:916992052518 | 6 | * @author Chuck Timber |
ChuckTimber | 4:916992052518 | 7 | * @date 12/08/2014 |
ChuckTimber | 4:916992052518 | 8 | */ |
ChuckTimber | 6:abd0d8d58fed | 9 | |
ChuckTimber | 6:abd0d8d58fed | 10 | #ifndef MBED_RENC_H |
ChuckTimber | 6:abd0d8d58fed | 11 | #define MBED_RENC_H |
ChuckTimber | 6:abd0d8d58fed | 12 | |
ChuckTimber | 6:abd0d8d58fed | 13 | #include "mbed.h" |
ChuckTimber | 6:abd0d8d58fed | 14 | |
ChuckTimber | 6:abd0d8d58fed | 15 | /** |
ChuckTimber | 6:abd0d8d58fed | 16 | * @define |
ChuckTimber | 6:abd0d8d58fed | 17 | * |
ChuckTimber | 6:abd0d8d58fed | 18 | */ |
ChuckTimber | 6:abd0d8d58fed | 19 | #define RENC_SAMPLING_PERIOD 0.002 |
ChuckTimber | 6:abd0d8d58fed | 20 | #define RENC_EXECUTION_DELAY 300 |
ChuckTimber | 6:abd0d8d58fed | 21 | |
ChuckTimber | 6:abd0d8d58fed | 22 | namespace mbed { |
ChuckTimber | 6:abd0d8d58fed | 23 | |
ChuckTimber | 6:abd0d8d58fed | 24 | enum { STOP, CLOCKWISE, COUNTERCLOCKWISE }; |
ChuckTimber | 6:abd0d8d58fed | 25 | // enum { STOP, CC, CCW }; |
ChuckTimber | 6:abd0d8d58fed | 26 | |
ChuckTimber | 6:abd0d8d58fed | 27 | /** Class: REnc |
ChuckTimber | 6:abd0d8d58fed | 28 | * A class to handle a rotary encoder |
ChuckTimber | 6:abd0d8d58fed | 29 | * This class uses DigitalIn and Ticker |
ChuckTimber | 1:2732adb68dad | 30 | * |
ChuckTimber | 1:2732adb68dad | 31 | * Refered to: http://elm-chan.org/docs/tec/te04.html |
ChuckTimber | 0:c905f9e6866f | 32 | * |
ChuckTimber | 0:c905f9e6866f | 33 | * Example: |
ChuckTimber | 0:c905f9e6866f | 34 | * @code |
ChuckTimber | 1:2732adb68dad | 35 | * // REnc sample |
ChuckTimber | 1:2732adb68dad | 36 | * #include "mbed.h" |
ChuckTimber | 1:2732adb68dad | 37 | * #include "REnc.h" |
ChuckTimber | 1:2732adb68dad | 38 | * void proc_REnc_right(void); |
ChuckTimber | 1:2732adb68dad | 39 | * void proc_REnc_left(void); |
ChuckTimber | 1:2732adb68dad | 40 | * |
ChuckTimber | 1:2732adb68dad | 41 | * // void proc_REnc_right(void) { } |
ChuckTimber | 1:2732adb68dad | 42 | * // void proc_REnc_left(void) { } |
ChuckTimber | 1:2732adb68dad | 43 | * |
ChuckTimber | 1:2732adb68dad | 44 | * REnc renc(dp1, dp2); |
ChuckTimber | 1:2732adb68dad | 45 | * |
ChuckTimber | 1:2732adb68dad | 46 | * int main() |
ChuckTimber | 1:2732adb68dad | 47 | * { |
ChuckTimber | 1:2732adb68dad | 48 | * |
ChuckTimber | 1:2732adb68dad | 49 | * // renc.setHandleRight(&proc_REnc_right); |
ChuckTimber | 1:2732adb68dad | 50 | * // renc.setHandleLeft(&proc_REnc_left); |
ChuckTimber | 1:2732adb68dad | 51 | * |
ChuckTimber | 1:2732adb68dad | 52 | * while(1) { |
ChuckTimber | 3:9dfe441065e9 | 53 | * if (renc.CMD == CLOCKWISE) { |
ChuckTimber | 1:2732adb68dad | 54 | * proc_REnc_right(); |
ChuckTimber | 1:2732adb68dad | 55 | * renc.CMD = STOP; |
ChuckTimber | 3:9dfe441065e9 | 56 | * } else if (renc.CMD == COUNTERCLOCKWISE) { |
ChuckTimber | 1:2732adb68dad | 57 | * proc_REnc_left(); |
ChuckTimber | 1:2732adb68dad | 58 | * renc.CMD = STOP; |
ChuckTimber | 1:2732adb68dad | 59 | * } |
ChuckTimber | 3:9dfe441065e9 | 60 | * if (renc.STABLE) { |
ChuckTimber | 3:9dfe441065e9 | 61 | * // do_something |
ChuckTimber | 3:9dfe441065e9 | 62 | * } |
ChuckTimber | 1:2732adb68dad | 63 | * } |
ChuckTimber | 1:2732adb68dad | 64 | * } |
ChuckTimber | 0:c905f9e6866f | 65 | * @endcode |
ChuckTimber | 0:c905f9e6866f | 66 | */ |
ChuckTimber | 0:c905f9e6866f | 67 | class REnc { |
ChuckTimber | 0:c905f9e6866f | 68 | |
ChuckTimber | 0:c905f9e6866f | 69 | public: |
ChuckTimber | 6:abd0d8d58fed | 70 | unsigned char CMD; /*!< CMD represents the state of rotation |
ChuckTimber | 5:3e6931797218 | 71 | * @retval STOP |
ChuckTimber | 5:3e6931797218 | 72 | * @retval CLOCKWISE |
ChuckTimber | 5:3e6931797218 | 73 | * @retval COUNTERCLOCKWISE |
ChuckTimber | 5:3e6931797218 | 74 | */ |
ChuckTimber | 6:abd0d8d58fed | 75 | unsigned char STABLE; /*!< STABLE represents the rotation stability, |
ChuckTimber | 6:abd0d8d58fed | 76 | * raises RENC_EXECUTION_DELAY counts after REnc STOPping |
ChuckTimber | 6:abd0d8d58fed | 77 | * @retval 1 - stable |
ChuckTimber | 5:3e6931797218 | 78 | */ |
ChuckTimber | 4:916992052518 | 79 | |
ChuckTimber | 4:916992052518 | 80 | /** set callback function to Clockwise TURN */ |
ChuckTimber | 4:916992052518 | 81 | void setHandleCC(void (*fptr)(void)); |
ChuckTimber | 4:916992052518 | 82 | /** set callback function to Counterclockwise TURN */ |
ChuckTimber | 4:916992052518 | 83 | void setHandleCCW(void (*fptr)(void)); |
ChuckTimber | 0:c905f9e6866f | 84 | |
ChuckTimber | 5:3e6931797218 | 85 | /// constructor |
ChuckTimber | 0:c905f9e6866f | 86 | REnc(PinName pina, PinName pinb); |
ChuckTimber | 5:3e6931797218 | 87 | /// destructor |
ChuckTimber | 4:916992052518 | 88 | virtual ~REnc() { }; |
ChuckTimber | 0:c905f9e6866f | 89 | |
ChuckTimber | 0:c905f9e6866f | 90 | private: |
ChuckTimber | 0:c905f9e6866f | 91 | void sample_encoder(void); |
ChuckTimber | 4:916992052518 | 92 | void (*mCCCallback)(void); |
ChuckTimber | 4:916992052518 | 93 | void (*mCCWCallback)(void); |
ChuckTimber | 0:c905f9e6866f | 94 | |
ChuckTimber | 0:c905f9e6866f | 95 | DigitalIn _pina; |
ChuckTimber | 0:c905f9e6866f | 96 | DigitalIn _pinb; |
ChuckTimber | 0:c905f9e6866f | 97 | Ticker _tick; |
ChuckTimber | 0:c905f9e6866f | 98 | |
ChuckTimber | 0:c905f9e6866f | 99 | }; /* end of REnc class definition */ |
ChuckTimber | 0:c905f9e6866f | 100 | |
ChuckTimber | 0:c905f9e6866f | 101 | } /* end of namespace mbed */ |
ChuckTimber | 0:c905f9e6866f | 102 | #endif |