Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CommandHandler HygroClip2 InterruptBasedEncoder SPI_TFT_ILI9341 mbed-src-no-hal
Encoder.h@3:3ef8c2d7b1bf, 2016-03-15 (annotated)
- Committer:
- wolfsberger
- Date:
- Tue Mar 15 07:46:06 2016 +0000
- Revision:
- 3:3ef8c2d7b1bf
Reimported from emblocks
Who changed what in which revision?
User | Revision | Line number | New 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 */ |