#define ENC1A 2
#define ENC1B 4
#define ENC2A 3
#define ENC2B 5
volatile int pos1i = 0; // specify pos1i as volatile
volatile int pos2i = 0; // specify pos2i as volatile
void readEncoder1(){
int b = digitalRead(ENC1B);
if(b > 0){
pos1i++;
}
else{
pos1i--;
}}
void readEncoder2(){
int b = digitalRead(ENC2B);
if(b > 0){
pos2i++;
}
else{
pos2i--;
}
}
void setup() {
Serial.begin(9600);
pinMode(ENC1A,INPUT);
pinMode(ENC1B,INPUT);
pinMode(ENC2A,INPUT);
pinMode(ENC2B,INPUT);
attachInterrupt(digitalPinToInterrupt(ENC1A),readEncoder1,RISING);
attachInterrupt(digitalPinToInterrupt(ENC2A),readEncoder2,RISING);
}
void loop() {
float WheelCir = 200; // wheel circumfrance in cm pi*d
float EncCntsRev = 265; // counts per rev of wheel
int pos1 = 0;
int pos2 = 0;
noInterrupts(); // disable interrupts temporarily while reading
pos1 = pos1i;
pos2 = pos2i;
interrupts(); // turn interrupts back on
float DistanceA = ( WheelCir/ EncCntsRev) * pos1;
float DistanceB = ( WheelCir/ EncCntsRev) * pos2;
Serial.print("Encoder 1 ");
Serial.print(DistanceA);
Serial.print(" Encoder 2 ");
Serial.print(DistanceB);
Serial.println(" Distance (cm)");
}