Quadrature decoder

Dependents:   Telliskivi2_2014

Committer:
Reiko
Date:
Sat Sep 14 17:16:32 2013 +0000
Revision:
2:72d7f93f2881
Parent:
1:83b43784d90c
Made code shorter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:0e8cb3139868 1 #include "qed.h"
Reiko 0:0e8cb3139868 2
Reiko 0:0e8cb3139868 3 QED::QED(PinName channelA, PinName channelB)
Reiko 0:0e8cb3139868 4 : interruptA(channelA), interruptB(channelB) {
Reiko 0:0e8cb3139868 5
Reiko 0:0e8cb3139868 6 pulses = 0;
Reiko 2:72d7f93f2881 7 currState = (interruptA.read() << 1) | (interruptB.read());
Reiko 0:0e8cb3139868 8 prevState = currState;
Reiko 0:0e8cb3139868 9
Reiko 0:0e8cb3139868 10 interruptA.rise(this, &QED::decode);
Reiko 0:0e8cb3139868 11 interruptA.fall(this, &QED::decode);
Reiko 0:0e8cb3139868 12 interruptB.rise(this, &QED::decode);
Reiko 0:0e8cb3139868 13 interruptB.fall(this, &QED::decode);
Reiko 0:0e8cb3139868 14 }
Reiko 0:0e8cb3139868 15
Reiko 0:0e8cb3139868 16 int QED::read() {
Reiko 0:0e8cb3139868 17 int pulseCount = pulses;
Reiko 0:0e8cb3139868 18 pulses = 0;
Reiko 1:83b43784d90c 19 return pulseCount;
Reiko 0:0e8cb3139868 20 }
Reiko 0:0e8cb3139868 21
Reiko 0:0e8cb3139868 22 void QED::decode() {
Reiko 2:72d7f93f2881 23 currState = (interruptA.read() << 1) | (interruptB.read());
Reiko 2:72d7f93f2881 24
Reiko 2:72d7f93f2881 25 int change = (prevState & PREV_MASK) ^ ((currState & CURR_MASK) >> 1);
Reiko 0:0e8cb3139868 26
Reiko 0:0e8cb3139868 27 if (change == 0) {
Reiko 0:0e8cb3139868 28 change = -1;
Reiko 0:0e8cb3139868 29 }
Reiko 0:0e8cb3139868 30
Reiko 2:72d7f93f2881 31 pulses -= change;
Reiko 0:0e8cb3139868 32 prevState = currState;
Reiko 0:0e8cb3139868 33 }