I connected a rotary encoders grey code Com (center pin) to A0, grey code pin 1 to arduino GRD and a 64k resistor to encoders gray code pins 1 and 2.
then I enabled A0 internal pullup resistor and wrote a code to determine whether the encoder turned left or write and used timer one to check for input changes It seems to be working well
this is the code I used it requires timerone library Arduino Playground - HomePage
#include <TimerOne.h>
boolean gotHigh=false; //Used to check if it went to High value
boolean gotLow=false; //Used to Check if it went to Low value
boolean valueHigh=false; //Used to check if the last value is high or low to determine the rotation
boolean hasTurned=false;
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT_PULLUP); //Set the internal pullup resistor
Timer1.initialize(1000); //Set the interval of the checks
Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}
void loop()
{
// Your code here
}
void timerIsr(){
int sensorValue = analogRead(A0);
if (sensorValue<950){
if (sensorValue>400){valueHigh=true;
gotHigh=true;
}
else {
valueHigh=false;
gotLow=true;
}
hasTurned=true;
}
else if (hasTurned==true){
hasTurned=false;
if ((valueHigh==true) && (gotLow==true)){
Serial.println("Left"); //you code here for left turns eg. Myval--
}
else if (gotHigh==true){
Serial.println("Right");//you code here for left turns eg. Myval++
}
gotHigh=false;
gotLow=false;
}
}