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
CRotaryEncoder.cpp@0:56f636261771, 2010-11-09 (annotated)
- Committer:
- Raabinator
- Date:
- Tue Nov 09 20:14:32 2010 +0000
- Revision:
- 0:56f636261771
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Raabinator | 0:56f636261771 | 1 | #include "mbed.h" |
Raabinator | 0:56f636261771 | 2 | #include "CRotaryEncoder.h" |
Raabinator | 0:56f636261771 | 3 | |
Raabinator | 0:56f636261771 | 4 | CRotaryEncoder::CRotaryEncoder(PinName pinA, PinName pinB) |
Raabinator | 0:56f636261771 | 5 | { |
Raabinator | 0:56f636261771 | 6 | m_pinA = new InterruptIn(pinA); |
Raabinator | 0:56f636261771 | 7 | m_pinA->rise(this, &CRotaryEncoder::rise); |
Raabinator | 0:56f636261771 | 8 | m_pinA->fall(this, &CRotaryEncoder::fall); |
Raabinator | 0:56f636261771 | 9 | |
Raabinator | 0:56f636261771 | 10 | m_pinB = new DigitalIn(pinB); |
Raabinator | 0:56f636261771 | 11 | m_position = 0; |
Raabinator | 0:56f636261771 | 12 | } |
Raabinator | 0:56f636261771 | 13 | |
Raabinator | 0:56f636261771 | 14 | CRotaryEncoder::~CRotaryEncoder() |
Raabinator | 0:56f636261771 | 15 | { |
Raabinator | 0:56f636261771 | 16 | delete m_pinA; |
Raabinator | 0:56f636261771 | 17 | delete m_pinB; |
Raabinator | 0:56f636261771 | 18 | } |
Raabinator | 0:56f636261771 | 19 | |
Raabinator | 0:56f636261771 | 20 | int CRotaryEncoder::Get(void) |
Raabinator | 0:56f636261771 | 21 | { |
Raabinator | 0:56f636261771 | 22 | return m_position; |
Raabinator | 0:56f636261771 | 23 | } |
Raabinator | 0:56f636261771 | 24 | |
Raabinator | 0:56f636261771 | 25 | void CRotaryEncoder::Set(int value) |
Raabinator | 0:56f636261771 | 26 | { |
Raabinator | 0:56f636261771 | 27 | m_position = value; |
Raabinator | 0:56f636261771 | 28 | } |
Raabinator | 0:56f636261771 | 29 | |
Raabinator | 0:56f636261771 | 30 | |
Raabinator | 0:56f636261771 | 31 | void CRotaryEncoder::fall(void) |
Raabinator | 0:56f636261771 | 32 | { |
Raabinator | 0:56f636261771 | 33 | if(*m_pinB == 1) |
Raabinator | 0:56f636261771 | 34 | { |
Raabinator | 0:56f636261771 | 35 | m_position++; |
Raabinator | 0:56f636261771 | 36 | } |
Raabinator | 0:56f636261771 | 37 | else |
Raabinator | 0:56f636261771 | 38 | { |
Raabinator | 0:56f636261771 | 39 | m_position--; |
Raabinator | 0:56f636261771 | 40 | } |
Raabinator | 0:56f636261771 | 41 | } |
Raabinator | 0:56f636261771 | 42 | |
Raabinator | 0:56f636261771 | 43 | void CRotaryEncoder::rise(void) |
Raabinator | 0:56f636261771 | 44 | { |
Raabinator | 0:56f636261771 | 45 | if(*m_pinB == 1) |
Raabinator | 0:56f636261771 | 46 | { |
Raabinator | 0:56f636261771 | 47 | m_position--; |
Raabinator | 0:56f636261771 | 48 | } |
Raabinator | 0:56f636261771 | 49 | else |
Raabinator | 0:56f636261771 | 50 | { |
Raabinator | 0:56f636261771 | 51 | m_position++; |
Raabinator | 0:56f636261771 | 52 | } |
Raabinator | 0:56f636261771 | 53 | } |
Raabinator | 0:56f636261771 | 54 |