Rotary Encoder handling library for mbed

Dependents:   MIDI_CW Gemphet8

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?

UserRevisionLine numberNew contents of line
ChuckTimber 4:916992052518 1 /**
ChuckTimber 4:916992052518 2 * @file REnc.cpp
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 #include "REnc.h"
ChuckTimber 6:abd0d8d58fed 10 #include "mbed.h"
ChuckTimber 6:abd0d8d58fed 11
ChuckTimber 6:abd0d8d58fed 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 6:abd0d8d58fed 64 *
ChuckTimber 6:abd0d8d58fed 65 * The pins are PullUp internally.
ChuckTimber 4:916992052518 66 */
ChuckTimber 0:c905f9e6866f 67 REnc::REnc(PinName pina, PinName pinb) : _pina(pina), _pinb(pinb)
ChuckTimber 0:c905f9e6866f 68 {
ChuckTimber 4:916992052518 69 _pina.mode(PullUp);
ChuckTimber 4:916992052518 70 _pinb.mode(PullUp);
ChuckTimber 1:2732adb68dad 71 CMD = STOP;
ChuckTimber 2:46173a05338e 72 STABLE = 1;
ChuckTimber 4:916992052518 73 mCCCallback = NULL;
ChuckTimber 4:916992052518 74 mCCWCallback = NULL;
ChuckTimber 2:46173a05338e 75 _tick.attach(this, &REnc::sample_encoder, RENC_SAMPLING_PERIOD);
ChuckTimber 0:c905f9e6866f 76 }