Six crescent shaped legs

Dependencies:   mbed

Committer:
sim642
Date:
Tue Jun 21 14:43:44 2016 +0000
Revision:
47:4f418a4b0051
Parent:
37:8021b3ce241a
Byte based communication

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sim642 2:cf0147952fb9 1 #include "Encoder.hpp"
sim642 2:cf0147952fb9 2
sim642 20:1ceae0d063c6 3 /*
sim642 20:1ceae0d063c6 4 Forward:
sim642 20:1ceae0d063c6 5 A 0011001100
sim642 20:1ceae0d063c6 6 B 1001100110
sim642 20:1ceae0d063c6 7 pB 1100110011
sim642 20:1ceae0d063c6 8 A != pB
sim642 20:1ceae0d063c6 9
sim642 20:1ceae0d063c6 10 Backward:
sim642 20:1ceae0d063c6 11 A 0011001100
sim642 20:1ceae0d063c6 12 B 0110011001
sim642 20:1ceae0d063c6 13 pB 0011001100
sim642 20:1ceae0d063c6 14 A == pB
sim642 20:1ceae0d063c6 15 */
sim642 20:1ceae0d063c6 16
sim642 12:8de7f5d56fe4 17 Encoder::Encoder(EncoderData nData) :
sim642 12:8de7f5d56fe4 18 data(nData),
sim642 20:1ceae0d063c6 19 intA(data.encAPin), intB(data.encBPin),
sim642 20:1ceae0d063c6 20 valA(DigitalIn(data.encAPin).read()),
sim642 21:aee7370d74d1 21 valB(DigitalIn(data.encBPin).read())
sim642 2:cf0147952fb9 22 {
sim642 21:aee7370d74d1 23 intA.rise(this, &Encoder::changeA);
sim642 21:aee7370d74d1 24 intA.fall(this, &Encoder::changeA);
sim642 21:aee7370d74d1 25 intB.rise(this, &Encoder::changeB);
sim642 21:aee7370d74d1 26 intB.fall(this, &Encoder::changeB);
sim642 37:8021b3ce241a 27 reset();
sim642 37:8021b3ce241a 28 }
sim642 37:8021b3ce241a 29
sim642 37:8021b3ce241a 30 void Encoder::reset()
sim642 37:8021b3ce241a 31 {
sim642 37:8021b3ce241a 32 count = 0;
sim642 2:cf0147952fb9 33 }
sim642 2:cf0147952fb9 34
sim642 14:4143ddddef1b 35 long Encoder::getCount() const
sim642 2:cf0147952fb9 36 {
sim642 2:cf0147952fb9 37 return count;
sim642 2:cf0147952fb9 38 }
sim642 2:cf0147952fb9 39
sim642 14:4143ddddef1b 40 float Encoder::getTurn() const
sim642 14:4143ddddef1b 41 {
sim642 14:4143ddddef1b 42 return float(getCount()) / data.turnCount;
sim642 14:4143ddddef1b 43 }
sim642 14:4143ddddef1b 44
sim642 21:aee7370d74d1 45 void Encoder::changeA()
sim642 20:1ceae0d063c6 46 {
sim642 21:aee7370d74d1 47 valA = !valA;
sim642 21:aee7370d74d1 48 changeCount(false);
sim642 20:1ceae0d063c6 49 }
sim642 20:1ceae0d063c6 50
sim642 21:aee7370d74d1 51 void Encoder::changeB()
sim642 2:cf0147952fb9 52 {
sim642 21:aee7370d74d1 53 valB = !valB;
sim642 21:aee7370d74d1 54 changeCount(true);
sim642 20:1ceae0d063c6 55 }
sim642 20:1ceae0d063c6 56
sim642 21:aee7370d74d1 57 void Encoder::changeCount(bool flipB)
sim642 20:1ceae0d063c6 58 {
sim642 21:aee7370d74d1 59 if (valA == (valB ^ flipB))
sim642 2:cf0147952fb9 60 count++;
sim642 2:cf0147952fb9 61 else
sim642 2:cf0147952fb9 62 count--;
sim642 2:cf0147952fb9 63 }