Handle rotary encoder connected to two pins. With interrupt. Operating encoder changes an int position value that can be polled.
Dependents: encoder_test distance_measure speed_measure straight_speed_control ... more
Diff: CRotaryEncoder.cpp
- Revision:
- 0:56f636261771
diff -r 000000000000 -r 56f636261771 CRotaryEncoder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CRotaryEncoder.cpp Tue Nov 09 20:14:32 2010 +0000 @@ -0,0 +1,54 @@ +#include "mbed.h" +#include "CRotaryEncoder.h" + +CRotaryEncoder::CRotaryEncoder(PinName pinA, PinName pinB) +{ + m_pinA = new InterruptIn(pinA); + m_pinA->rise(this, &CRotaryEncoder::rise); + m_pinA->fall(this, &CRotaryEncoder::fall); + + m_pinB = new DigitalIn(pinB); + m_position = 0; +} + +CRotaryEncoder::~CRotaryEncoder() +{ + delete m_pinA; + delete m_pinB; +} + +int CRotaryEncoder::Get(void) +{ + return m_position; +} + +void CRotaryEncoder::Set(int value) +{ + m_position = value; +} + + +void CRotaryEncoder::fall(void) +{ + if(*m_pinB == 1) + { + m_position++; + } + else + { + m_position--; + } +} + +void CRotaryEncoder::rise(void) +{ + if(*m_pinB == 1) + { + m_position--; + } + else + { + m_position++; + } +} +