Rotary Encoder handling library for mbed
REnc.cpp@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 | #include "REnc.h" |
ChuckTimber | 0:c905f9e6866f | 2 | #include "mbed.h" |
ChuckTimber | 0:c905f9e6866f | 3 | |
ChuckTimber | 4:916992052518 | 4 | /** |
ChuckTimber | 4:916992052518 | 5 | * @file REnc.cpp |
ChuckTimber | 4:916992052518 | 6 | * Project Rotary Encoder handling Library |
ChuckTimber | 4:916992052518 | 7 | * @brief Rotary Encoder handling library for mbed |
ChuckTimber | 4:916992052518 | 8 | * @version 1.0 |
ChuckTimber | 4:916992052518 | 9 | * @author Chuck Timber |
ChuckTimber | 4:916992052518 | 10 | * @date 12/08/2014 |
ChuckTimber | 4:916992052518 | 11 | */ |
ChuckTimber | 4:916992052518 | 12 | /** class to handle a rotary encoder |
ChuckTimber | 0:c905f9e6866f | 13 | * |
ChuckTimber | 0:c905f9e6866f | 14 | */ |
ChuckTimber | 0:c905f9e6866f | 15 | |
ChuckTimber | 0:c905f9e6866f | 16 | using namespace mbed; |
ChuckTimber | 0:c905f9e6866f | 17 | |
ChuckTimber | 1:2732adb68dad | 18 | // private function |
ChuckTimber | 1:2732adb68dad | 19 | /** sample_encoder input and process |
ChuckTimber | 1:2732adb68dad | 20 | * |
ChuckTimber | 1:2732adb68dad | 21 | */ |
ChuckTimber | 0:c905f9e6866f | 22 | void REnc::sample_encoder(void) |
ChuckTimber | 0:c905f9e6866f | 23 | { |
ChuckTimber | 0:c905f9e6866f | 24 | static unsigned char i; |
ChuckTimber | 1:2732adb68dad | 25 | static unsigned int cnt; |
ChuckTimber | 1:2732adb68dad | 26 | |
ChuckTimber | 0:c905f9e6866f | 27 | i = (i << 2) + ((~_pinb & 0x01)<< 1) + (~_pina & 0x1); |
ChuckTimber | 0:c905f9e6866f | 28 | i &= 0xf; |
ChuckTimber | 0:c905f9e6866f | 29 | |
ChuckTimber | 0:c905f9e6866f | 30 | switch (i) { |
ChuckTimber | 0:c905f9e6866f | 31 | case 0x7: |
ChuckTimber | 0:c905f9e6866f | 32 | case 0xe: |
ChuckTimber | 3:9dfe441065e9 | 33 | CMD = CLOCKWISE; |
ChuckTimber | 2:46173a05338e | 34 | cnt = RENC_EXECUTION_DELAY; |
ChuckTimber | 1:2732adb68dad | 35 | STABLE = 0; |
ChuckTimber | 4:916992052518 | 36 | if (mCCCallback != NULL) { mCCCallback(); CMD = STOP; } |
ChuckTimber | 0:c905f9e6866f | 37 | break; |
ChuckTimber | 0:c905f9e6866f | 38 | case 0xb: |
ChuckTimber | 0:c905f9e6866f | 39 | case 0xd: |
ChuckTimber | 3:9dfe441065e9 | 40 | CMD = COUNTERCLOCKWISE; |
ChuckTimber | 2:46173a05338e | 41 | cnt = RENC_EXECUTION_DELAY; |
ChuckTimber | 1:2732adb68dad | 42 | STABLE = 0; |
ChuckTimber | 4:916992052518 | 43 | if (mCCWCallback != NULL) { mCCWCallback(); CMD = STOP; } |
ChuckTimber | 0:c905f9e6866f | 44 | break; |
ChuckTimber | 0:c905f9e6866f | 45 | default: |
ChuckTimber | 1:2732adb68dad | 46 | CMD = STOP; |
ChuckTimber | 1:2732adb68dad | 47 | if (cnt) |
ChuckTimber | 1:2732adb68dad | 48 | cnt--; |
ChuckTimber | 1:2732adb68dad | 49 | else |
ChuckTimber | 1:2732adb68dad | 50 | STABLE = 1; |
ChuckTimber | 0:c905f9e6866f | 51 | } |
ChuckTimber | 0:c905f9e6866f | 52 | } |
ChuckTimber | 0:c905f9e6866f | 53 | |
ChuckTimber | 4:916992052518 | 54 | /** set callback function to Clockwise TURN */ |
ChuckTimber | 4:916992052518 | 55 | void REnc::setHandleCC(void (*fptr)(void)) { mCCCallback = fptr; } |
ChuckTimber | 4:916992052518 | 56 | /** set callback function to Counterclockwise TURN */ |
ChuckTimber | 4:916992052518 | 57 | void REnc::setHandleCCW(void (*fptr)(void)) { mCCWCallback = fptr; } |
ChuckTimber | 0:c905f9e6866f | 58 | |
ChuckTimber | 5:3e6931797218 | 59 | /// constructor |
ChuckTimber | 4:916992052518 | 60 | /** Create an REnc object connected to DigitalIn pins |
ChuckTimber | 4:916992052518 | 61 | * |
ChuckTimber | 4:916992052518 | 62 | * @param pina - Digital Input to A-phase of the rotary encoder |
ChuckTimber | 4:916992052518 | 63 | * @param pinb - Digital Input to B-phase of the rotary encoder |
ChuckTimber | 4:916992052518 | 64 | */ |
ChuckTimber | 0:c905f9e6866f | 65 | REnc::REnc(PinName pina, PinName pinb) : _pina(pina), _pinb(pinb) |
ChuckTimber | 0:c905f9e6866f | 66 | { |
ChuckTimber | 4:916992052518 | 67 | _pina.mode(PullUp); |
ChuckTimber | 4:916992052518 | 68 | _pinb.mode(PullUp); |
ChuckTimber | 1:2732adb68dad | 69 | CMD = STOP; |
ChuckTimber | 2:46173a05338e | 70 | STABLE = 1; |
ChuckTimber | 4:916992052518 | 71 | mCCCallback = NULL; |
ChuckTimber | 4:916992052518 | 72 | mCCWCallback = NULL; |
ChuckTimber | 2:46173a05338e | 73 | _tick.attach(this, &REnc::sample_encoder, RENC_SAMPLING_PERIOD); |
ChuckTimber | 0:c905f9e6866f | 74 | } |