Clock går till både 2 och 3 och data till 4.
5v till plus
GND till GND
/*
Experiment med Arduino Uno R3
Rotary encoder
Detta koppling och program är skapat av Per-Anders Hult.
Denna skript ar publicerad för det kit och komponenter som vi
säljer på Tradera under namnet pc_h
Denna skript får av andra personer endast användas privat bruk.
Om all text i denna anmärkning bibehålls, får denna skript ändras och förbättras och publiceras igen.
Om den översätts till annat språk måste även denna text översättas.
Första publicering på : http://sites.google.com/site/pcharduino/rotary-encoder
Om du publicerar denna skript igen, så skriv ditt namn eller alias här.
Denna skript är ändrad av: (skriv ditt namn här)
*/
//Problemet med dessa är ojämn ändring från ett tillstånd till ett annat.
//Ändra från 1 till 0 blir ofta ...101010101010... vilket resulterar till
//många steg eller feltolkad data
//Denna lösning med en start och en stopp fungerar mycket bra
#define EncoderDebug 1
#define LedPin 13 //
#define DataPin 4 //
boolean StartHoger = false;
boolean StartVanster = false;
int RotatePosition = 0;
int SenastRotatePosition = 0;
void setup(){
#if EncoderDebug > 0
Serial.begin(9600);
#endif
pinMode(LedPin, OUTPUT);
pinMode(DataPin, INPUT);
//Samma signal går både till Pinne 2 och 3
//Men triggar på olika saker.
//Att se en av signalerna som en klocksignal underlättar
//när man ska förstå hur den fungerar
attachInterrupt(0, KlockaFaller, FALLING );//Pinne 2
attachInterrupt(1, KlockaOkar, RISING );//Pinne3
}
void loop(){
#if EncoderDebug == 1
if(RotatePosition != SenastRotatePosition){
Serial.print("RotatePosition"); Serial.print("="); Serial.println(RotatePosition);
SenastRotatePosition = RotatePosition;
}
#endif
}
void KlockaFaller(){
if(digitalRead(DataPin) == LOW ){
//Vridning höger
StartHoger = true;
StartVanster = false;
digitalWrite(LedPin, HIGH);
}else{
StartHoger = false;
StartVanster = true;
digitalWrite(LedPin, LOW);
}
}
void KlockaOkar(){
if(digitalRead(DataPin) == HIGH){
if(StartHoger){
RotatePosition ++;
StartHoger = false;
StartVanster = false;
}
}else{
if(StartVanster){
RotatePosition --;
StartHoger = false;
StartVanster = false;
}
}
}