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

Dependents:   AVC_20110423 incrementalencoder-pid-robot DataBus2018

IncrementalEncoder.cpp

Committer:
shimniok
Date:
2018-12-23
Revision:
1:5011d894d5a7
Parent:
0:dea4a931b267

File content as of revision 1:5011d894d5a7:

#include "IncrementalEncoder.h"

IncrementalEncoder::IncrementalEncoder(PinName pin):  _lastTicks(0),  _ticks(0), _interrupt(pin) {
    _interrupt.mode(PullNone); // default is pulldown but my encoder board uses a pull-up and that just don't work
    _interrupt.rise(callback(this, &IncrementalEncoder::_increment)); 
    _interrupt.fall(callback(this, &IncrementalEncoder::_increment)); 
}

unsigned int IncrementalEncoder::read() {
// disable interrupts?
    unsigned int ticks = _ticks - _lastTicks;
    _lastTicks = _ticks;
    
    return ticks;
}    

unsigned int IncrementalEncoder::readTotal() {
    return _ticks;
}

    
void IncrementalEncoder::reset() {
    _ticks = _lastTicks = 0;
}  


void IncrementalEncoder::_increment() {
    _ticks++;
}