#include "Encoder.h" volatile unsigned char Encoder::transitionCount = 0; Encoder::Encoder() { rps = 0; transitionsPerRotation = 1; // to prevent devide by zero distance = 0; } Encoder::Encoder(unsigned char pin, unsigned char transitionsPerRotation) : Encoder::Encoder() { /// Hmm. Arduino dependent code // pinMode(pin, INPUT_PULLUP); // attachInterrupt(digitalPinToInterrupt(pin), InterruptHandler, CHANGE); this->transitionsPerRotation = transitionsPerRotation; } void Encoder::InterruptHandler() { transitionCount++; } float Encoder::GetRotationsPerSecond() { return rps; } void Encoder::ResetDistance() { distance = 0; } float Encoder::GetRotationDistance() { return distance; } void Encoder::Update(float timeStep) { // Hmmm. Arduino-dependent code... // noInterrupts(); float distanceThisUpdate = transitionCount / transitionsPerRotation; transitionCount = 0; // interrupts(); // float rps = distanceThisUpdate * timeStep; distance += distanceThisUpdate; }