Rotary Encoder handling library for mbed

Dependents:   MIDI_CW Gemphet8

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?

UserRevisionLine numberNew 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