RoboidControl-cpp/Encoder.cpp

50 lines
1.1 KiB
C++

#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::GetRevolutionsPerSecond() {
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;
}
void Encoder::StartCountingRevolutions() {}
float Encoder::RestartCountingRevolutions() {
return 0;
}