Arduino und Encoder – Schaltplan, Erklärung, Code

Arduino Encoder: Rotary Encoder* oder auch Dreh-Impulsgeber sehen aus wie Potentiometer. Man kann sie aber unendlich drehen. Manche Leute nennen sie deshalb auch Endlos-Potentiometer. Technisch funktionieren sie aber ganz anders.

Im Innern eines Encoders (Impulsgebers) sind zwei Taster integriert. Sie schalten um einen halben Klick Phasenverschoben.

Detektiert man auf dem Kanal 1 (also vom ersten Taster) einen Wechsel von LOW zu HIGH prüft man, ob Kanal 2. Ist dieser LOW, wurde in die eine Richtung gedreht, ist er HIGH, wurde er in die andere Richtung gedreht.

Arduino Encoder – Uhrzeigersinn
Arduino Encoder – Gegen Uhrzeigersinn

Arduino Encoder – Schaltplan

Arduino Encoder (Drehimpulsgeber) Schaltplan

Vom GND des Arduinos in den mittleren Anschluss des Encoders, die äußeren Anschlüsse sind mit den Arduino-Pins 3 und 4 verbunden.

Code (Einfache Version)

int val;
int encoderPinA = 2;
int encoderPinB = 3;
int encoderPos = 0;
int encoderPinALast = LOW;
int encoderPinANow = LOW;

void setup() {
  pinMode (encoderPinA, INPUT_PULLUP);
  pinMode (encoderPinB, INPUT_PULLUP);
  Serial.begin (115200);
}

void loop() {
  encoderPinANow = digitalRead(encoderPinA);
  if ((encoderPinALast == HIGH) && (encoderPinANow == LOW)) {
    if (digitalRead(encoderPinB) == HIGH) {
      encoderPos++;
    } else {
      encoderPos--;
    }
    Serial.println(encoderPos);
  }
  encoderPinALast = encoderPinANow;
}

Encoder mit Programm-Bibliothek

Eine elegante und wesentlich einfachere Herangehensweise ist die Verwendung eine Programm-Bibliothek (Library). Die Encoder-Bibliothek von Paul Stoffregen ist super funktional. Um sie zu installieren klicke in der Arduino-Software auf Sketch>Bibliothek einbinden>Bibliotheken verwalten und trage im Suchfeld Encoder ein. In der Liste findest du die Bibliothek Encoder by Paul Stoffregen. Installiere die aktuelle Version. Im Menü Datei>Beispiele>Encoder findest du Beispiel-Programme wie dieses:

/* Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */

#include <Encoder.h>

// Change these two numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder myEnc(2, 3);
//   avoid using pins with LEDs attached

void setup() {
  Serial.begin(115200);
  Serial.println("Basic Encoder Test:");
}

long oldPosition  = -999;

void loop() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }
}

Die Bibliothek übernimmt nun das ganze Encoder-Handling für dich und gibt einfach den aktuellen Wert aus.

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.