Jan Wolfsberger / Sensor

Dependencies:   CommandHandler HygroClip2 InterruptBasedEncoder SPI_TFT_ILI9341 mbed-src-no-hal

Committer:
wolfsberger
Date:
Tue Mar 15 07:46:06 2016 +0000
Revision:
3:3ef8c2d7b1bf
Reimported from emblocks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfsberger 3:3ef8c2d7b1bf 1 #ifndef ENCODER_H_INCLUDED
wolfsberger 3:3ef8c2d7b1bf 2 #define ENCODER_H_INCLUDED
wolfsberger 3:3ef8c2d7b1bf 3
wolfsberger 3:3ef8c2d7b1bf 4 class RotaryEncoder {
wolfsberger 3:3ef8c2d7b1bf 5 public:
wolfsberger 3:3ef8c2d7b1bf 6 RotaryEncoder(PinName outa, PinName outb)
wolfsberger 3:3ef8c2d7b1bf 7 : position_(0), delta_(0),
wolfsberger 3:3ef8c2d7b1bf 8 inta_(outa), intb_(outb), outa_(outa), outb_(outb) {
wolfsberger 3:3ef8c2d7b1bf 9 outa_.mode(PullUp);
wolfsberger 3:3ef8c2d7b1bf 10 outb_.mode(PullUp);
wolfsberger 3:3ef8c2d7b1bf 11 inta_.rise(this, &RotaryEncoder::handleIntA);
wolfsberger 3:3ef8c2d7b1bf 12 inta_.fall(this, &RotaryEncoder::handleIntA);
wolfsberger 3:3ef8c2d7b1bf 13 intb_.rise(this, &RotaryEncoder::handleIntB);
wolfsberger 3:3ef8c2d7b1bf 14 intb_.fall(this, &RotaryEncoder::handleIntB);
wolfsberger 3:3ef8c2d7b1bf 15 }
wolfsberger 3:3ef8c2d7b1bf 16
wolfsberger 3:3ef8c2d7b1bf 17 /** Returns the overall position of the encoder
wolfsberger 3:3ef8c2d7b1bf 18 */
wolfsberger 3:3ef8c2d7b1bf 19 int position() {
wolfsberger 3:3ef8c2d7b1bf 20 return position_;
wolfsberger 3:3ef8c2d7b1bf 21 }
wolfsberger 3:3ef8c2d7b1bf 22
wolfsberger 3:3ef8c2d7b1bf 23 /** Returns the encoders change since the last call to this function
wolfsberger 3:3ef8c2d7b1bf 24 */
wolfsberger 3:3ef8c2d7b1bf 25 int delta() {
wolfsberger 3:3ef8c2d7b1bf 26 int d = delta_;
wolfsberger 3:3ef8c2d7b1bf 27 delta_ = 0;
wolfsberger 3:3ef8c2d7b1bf 28 return d;
wolfsberger 3:3ef8c2d7b1bf 29 }
wolfsberger 3:3ef8c2d7b1bf 30
wolfsberger 3:3ef8c2d7b1bf 31 private:
wolfsberger 3:3ef8c2d7b1bf 32
wolfsberger 3:3ef8c2d7b1bf 33 // A = B --> Clockwise
wolfsberger 3:3ef8c2d7b1bf 34 // A /= B --> Counter clockwise
wolfsberger 3:3ef8c2d7b1bf 35 void handleIntA() {
wolfsberger 3:3ef8c2d7b1bf 36 if (outa_ == outb_) {
wolfsberger 3:3ef8c2d7b1bf 37 increment(1);
wolfsberger 3:3ef8c2d7b1bf 38 } else {
wolfsberger 3:3ef8c2d7b1bf 39 increment(-1);
wolfsberger 3:3ef8c2d7b1bf 40 }
wolfsberger 3:3ef8c2d7b1bf 41 }
wolfsberger 3:3ef8c2d7b1bf 42
wolfsberger 3:3ef8c2d7b1bf 43 // A = B --> Counter clockwise
wolfsberger 3:3ef8c2d7b1bf 44 // A /= B --> Clockwise
wolfsberger 3:3ef8c2d7b1bf 45 void handleIntB() {
wolfsberger 3:3ef8c2d7b1bf 46 if (outa_ == outb_) {
wolfsberger 3:3ef8c2d7b1bf 47 increment(-1);
wolfsberger 3:3ef8c2d7b1bf 48 } else {
wolfsberger 3:3ef8c2d7b1bf 49 increment(1);
wolfsberger 3:3ef8c2d7b1bf 50 }
wolfsberger 3:3ef8c2d7b1bf 51 }
wolfsberger 3:3ef8c2d7b1bf 52
wolfsberger 3:3ef8c2d7b1bf 53 void increment(int i) {
wolfsberger 3:3ef8c2d7b1bf 54 position_ += i;
wolfsberger 3:3ef8c2d7b1bf 55 delta_ += i;
wolfsberger 3:3ef8c2d7b1bf 56 }
wolfsberger 3:3ef8c2d7b1bf 57
wolfsberger 3:3ef8c2d7b1bf 58 int position_;
wolfsberger 3:3ef8c2d7b1bf 59 int delta_;
wolfsberger 3:3ef8c2d7b1bf 60
wolfsberger 3:3ef8c2d7b1bf 61 InterruptIn inta_;
wolfsberger 3:3ef8c2d7b1bf 62 InterruptIn intb_;
wolfsberger 3:3ef8c2d7b1bf 63 DigitalIn outa_;
wolfsberger 3:3ef8c2d7b1bf 64 DigitalIn outb_;
wolfsberger 3:3ef8c2d7b1bf 65 };
wolfsberger 3:3ef8c2d7b1bf 66
wolfsberger 3:3ef8c2d7b1bf 67 #endif /* ENCODER_H_INCLUDED */