An interface for a simple, 1-track, incremental encoder.

Dependents:   AVC_20110423 incrementalencoder-pid-robot DataBus2018

Committer:
shimniok
Date:
Sun Dec 23 18:29:10 2018 +0000
Revision:
1:5011d894d5a7
Parent:
0:dea4a931b267
Updated to use current callback interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:dea4a931b267 1 #include "IncrementalEncoder.h"
shimniok 0:dea4a931b267 2
shimniok 0:dea4a931b267 3 IncrementalEncoder::IncrementalEncoder(PinName pin): _lastTicks(0), _ticks(0), _interrupt(pin) {
shimniok 0:dea4a931b267 4 _interrupt.mode(PullNone); // default is pulldown but my encoder board uses a pull-up and that just don't work
shimniok 1:5011d894d5a7 5 _interrupt.rise(callback(this, &IncrementalEncoder::_increment));
shimniok 1:5011d894d5a7 6 _interrupt.fall(callback(this, &IncrementalEncoder::_increment));
shimniok 0:dea4a931b267 7 }
shimniok 0:dea4a931b267 8
shimniok 0:dea4a931b267 9 unsigned int IncrementalEncoder::read() {
shimniok 0:dea4a931b267 10 // disable interrupts?
shimniok 0:dea4a931b267 11 unsigned int ticks = _ticks - _lastTicks;
shimniok 0:dea4a931b267 12 _lastTicks = _ticks;
shimniok 0:dea4a931b267 13
shimniok 0:dea4a931b267 14 return ticks;
shimniok 0:dea4a931b267 15 }
shimniok 0:dea4a931b267 16
shimniok 0:dea4a931b267 17 unsigned int IncrementalEncoder::readTotal() {
shimniok 0:dea4a931b267 18 return _ticks;
shimniok 0:dea4a931b267 19 }
shimniok 0:dea4a931b267 20
shimniok 0:dea4a931b267 21
shimniok 0:dea4a931b267 22 void IncrementalEncoder::reset() {
shimniok 0:dea4a931b267 23 _ticks = _lastTicks = 0;
shimniok 0:dea4a931b267 24 }
shimniok 0:dea4a931b267 25
shimniok 0:dea4a931b267 26
shimniok 0:dea4a931b267 27 void IncrementalEncoder::_increment() {
shimniok 0:dea4a931b267 28 _ticks++;
shimniok 0:dea4a931b267 29 }