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