Rotary Encoder aansluitschema met voorbeeldcode voor Arduino
Benodigdheden
stappen
- Sluit de GND-pin van de rotary encoder aan op de GND-pin van de Arduino board.
- Sluit de + (VCC)-pin van de rotary encoder aan op de 5V-pin van de Arduino board.
- Sluit de SW (switch)-pin van de rotary encoder aan op digitale pin 5 van de Arduino board.
- Sluit de DT (data)-pin van de rotary encoder aan op digitale pin 4 van de Arduino board.
- Sluit de CLK (clock)-pin van de rotary encoder aan op digitale pin 3 van de Arduino board.
- Upload de code naar de Arduino Uno
- Open de Open de seriële monitor door op de knop rechts boven te klikken of door op je toetsenbord CTRL+Shift+M in te toetsen
Aansluitschema
Voorbeeldcode
int pinA = 3; // Verbonden met CLK
int pinB = 4; // Verbonden met DT
int pinBtn = 5; // Verbonden met SW
int encoderPosCount = 0;
int pinALast;
int aVal;
boolean bCW;
boolean btnPressed = false;
void setup() {
pinMode(pinA, INPUT);
pinMode(pinB, INPUT);
pinMode(pinBtn, INPUT_PULLUP);
/* Lees Pin A uit
De huidige staat van de pin reflecteert de laatste positie
*/
pinALast = digitalRead(pinA);
Serial.begin(9600);
}
void loop() {
aVal = digitalRead(pinA);
if (aVal != pinALast){ // Dit betekent dat de knop gedraaid wordt
// We moeten de draairichting bepalen door Pin B uit te lezen
if (digitalRead(pinB) != aVal) { // Dit betekent dat Pin A als eerste is veranderd - we draaien met de klok mee
encoderPosCount ++;
bCW = true;
} else { // Anders is Pin B als eerste veranderd en draaien we tegen de klok in
bCW = false;
encoderPosCount--;
}
Serial.print("Gedraaid: ");
if (bCW){
Serial.println("met de klok mee");
}else{
Serial.println("tegen de klok in");
}
Serial.print("Encoder Positie: ");
Serial.println(encoderPosCount);
}
pinALast = aVal;
if(digitalRead(pinBtn) == LOW && !btnPressed){ // Dit betekent dat de knop is ingedrukt
btnPressed = true;
Serial.println("Knop ingedrukt");
} else if (digitalRead(pinBtn) == HIGH && btnPressed){ // Dit betekent dat de knop is losgelaten
btnPressed = false;
Serial.println("Knop losgelaten");
}
}