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.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