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