Encoder Class
The encoder class is used to program the wheel encoders. It uses infrared light transmission to determine the speed at which the wheel is turning. By having a known number of slots in the wheel, the distance which a wheel turns can be easially calculated as the beam of light is continuously interrupted, sending a high or low signal back to the microcontroller. This information when combined with the time it takes to shift from a high to a low signal is used to calculate the speed at which the wheel is turning.
.cpp Code
#include "encoder.h"
encoder :: encoder (unsigned int slots, unsigned int diameter, unsigned int pin){
m_speed = 0.0;
m_currentTime = 0.0;
m_slots = slots; //number of slots in the encoder wheel is 20, but can be changed
m_diameter = diameter; //diameter of the wheel
m_pin = pin;
}
void encoder::updateTime(unsigned int time){
m_currentTime = time; //storing the time
m_speed = (62500*(207.35/(360*(18/m_currentTime))))/1000; //calculation to find speed
}
double encoder::getSpeed(){
return(m_speed); //gets the speed from updateTime
}
void encoder::zeroSpeed(){
m_speed = 0.0; //not moving, set to zero
}
.h Code
#ifndef encoder_h
#define encoder_h
class encoder{
private:
double m_speed; //float to allow the more accuracy for speed
double m_currentTime;
unsigned int m_slots;
unsigned int m_diameter;
unsigned int m_pin;
double m_prescalar;
public:
encoder(unsigned int slots, unsigned int diameter, unsigned int pin);
//Encoder is the constructor that sets/initializes the parameters
void updateTime(unsigned int time); //function to update the current time from the internal
timer
double getSpeed(); //calculate the speed
void zeroSpeed(); //set the speed to zero
};
#endif