Rotary Encoder aansluitschema met voorbeeldcode voor Arduino

Benodigdheden

stappen

  1. Sluit de GND-pin van de rotary encoder aan op de GND-pin van de Arduino board.
  2. Sluit de + (VCC)-pin van de rotary encoder aan op de 5V-pin van de Arduino board.
  3. Sluit de SW (switch)-pin van de rotary encoder aan op digitale pin 5 van de Arduino board.
  4. Sluit de DT (data)-pin van de rotary encoder aan op digitale pin 4 van de Arduino board.
  5. Sluit de CLK (clock)-pin van de rotary encoder aan op digitale pin 3 van de Arduino board.
  6. Upload de code naar de Arduino Uno
  7. 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");
  }
}