Rotary Encoder handling library for mbed
Diff: REnc.cpp
- Revision:
- 0:c905f9e6866f
- Child:
- 1:2732adb68dad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/REnc.cpp Sat Jul 26 22:49:27 2014 +0000 @@ -0,0 +1,51 @@ +#include "REnc.h" +#include "mbed.h" + +/** class to make sound with a buzzer, based on a PwmOut + * The class use a timeout to switch off the sound - it is not blocking while making noise + * + * Example: + * @code + * @endcode + */ + +using namespace mbed; + // constructor + /** Create a Beep object connected to the specified PwmOut pin + * + * @param pin PwmOut pin to connect to + */ + +void REnc::sample_encoder(void) +{ + static unsigned char i; + + i = (i << 2) + ((~_pinb & 0x01)<< 1) + (~_pina & 0x1); + i &= 0xf; + + switch (i) { + case 0x7: + case 0xe: + CMD = FORWARD; + if (mRightCallback != NULL) { mRightCallback(); CMD = IDLE; } + break; + case 0xb: + case 0xd: + CMD = BACKWARD; + if (mLeftCallback != NULL) { mLeftCallback(); CMD = IDLE; } + break; + default: + CMD = IDLE; + } +} + +void REnc::setHandleRight(void (*fptr)(void)) { mRightCallback = fptr; } +void REnc::setHandleLeft(void (*fptr)(void)) { mLeftCallback = fptr; } + +REnc::REnc(PinName pina, PinName pinb) : _pina(pina), _pinb(pinb) +{ + CMD = IDLE; + mRightCallback = NULL; + mLeftCallback = NULL; + _tick.attach(this, &REnc::sample_encoder, 0.01); +}