RoboidControl-cpp/Encoder.cpp
2023-11-07 15:11:33 +01:00

44 lines
1014 B
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::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;
}