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

Committer:
Raabinator
Date:
Tue Nov 09 20:14:32 2010 +0000
Revision:
0:56f636261771
First version

Who changed what in which revision?

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