Quadrature decoder
qed.cpp@2:72d7f93f2881, 2013-09-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |