Rotary Encoder KY-040 auslesen und den Wert im EEPROM ablegen

Der KY-040 Rotary Encoder (Drehimpulsgeber) mit Taste soll ausgelesen werden und beim Tastendruck soll der aktuelle Wert in das EEPROM des Arduinos abgelegt werden.

Er wird mit 5 Leitungen mit dem Arduino (Nano) verbunden:
Pin 6 zu CLK am KY-040
Pin 7 zu DT am KY-040
Pin 8 zu SW am KY-040
5V zu + am KY-040
GND zu GND am KY-040

Im setup Teil werden alle Anschlüsse als Input ausgewählt. Dann wird das EEPROM ausgelesen und mir diesem Wert gestartet.

In loop Teil wird zuerst überprüft ob der Taster gedrückt wurde, dann wird der Wert (pos)  gespeichert und gewartet bis der Taster wieder los gelassen wird.
Dann wird der Drehimpulsgeber überprüft und der Wert (pos) angepaßt.

Hier das fertige Programm

// Den Rotary encoder KY-040 auslesen
// Die Taste speichert den aktuellen Wert ins EEPROM
//
// Matthias Busse 10.2017 Version 1.0

#include <EEPROM.h> // standard Arduino Library

int ra = 6; // Pin 6 zu CLK am KY-040
int rb = 7; // Pin 7 zu DT am KY-040
int sw = 8; // Pin 8 zu SW am KY-040
int pos, alast, aval;
int eeadr=14; // Speicheradresse wird hier gewählt

void setup() { 
  pinMode (ra,INPUT);       // Rotary Encoder A & B ist in
  pinMode (rb,INPUT);
  pinMode(sw, INPUT);       // Schalter ist in
  digitalWrite(sw, HIGH);   // interner Pull up Widerstand auf 5V
  EEPROM.get(eeadr, pos);
  alast = digitalRead(ra);   
  Serial.begin (38400);
  Serial.print("Startpos: ");
  Serial.println(pos);
} 

 void loop() { 
  if( digitalRead(sw) == 0) { // Taste gedrückt?
    EEPROM.put(eeadr, pos);
    Serial.print("geschrieben: ");
    Serial.println(pos);
    while (digitalRead(sw) == 0); // warten bis die Taste losgelassen wird
  }
  aval = digitalRead(ra); // Encoder gedreht?
  if (aval != alast){ // wenn gedreht
    if (digitalRead(rb) != aval) { pos++; } // rechts rum
    else { pos--; } // sonst links
    Serial.print("Pos: ");
    Serial.println(pos);     
  } 
  alast = aval;
}

Und hier die Ausgabe in der Konsole:

Verwendet wurden:
Arduino Nano
KY-040 Rotary Encoder
Arduino Software 1.8.0

von Matthias Busse

Ein Gedanke zu „Rotary Encoder KY-040 auslesen und den Wert im EEPROM ablegen

  1. Pingback: PE4302 Attentuator einstellen vom PC & Rotary Encoder, Ausgabe auf LCD Display | Shelvin – Elektronik ausprobiert und erläutert

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.