Funktioniert wie ein Potentiometer, ermöglicht aber uneingeschränktes Drehen in beide Richtungen.
/*
* Encoder
* Ein Encoder ist ein Drehknopf, der uneingeschraenkt gedreht werden
* kann und das Arduino ueber einen jeden Schritt informiert.
* In der Variable count steht immer die aktuelle Position des Encoders.
* Bei einer Drehung um einen Schritt nach links wird 1 auf count addiert,
* bei einer Rechtsdrehung wird 1 subtrahiert.
* Zusaetzlich kann man den Drehknopf auch herunterdruecken, weil ein
* Standard-Button integriert ist.
*/
int encoderPinL = 4; // linker Pin am Encoder
int encoderPinR = 3; // rechter Pin am Encoder
int buttonPin = 7; // Pin fuer den Button
// variables for encoder/button (please don't touch)
int state, prevstate = 0, count = 0;
int nextEncoderState[4] = {
2, 0, 3, 1 };
int prevEncoderState[4] = {
1, 3, 0, 2 };
int buttonValue = 0;
void setup() {
pinMode(encoderPinL, INPUT);
pinMode(encoderPinR, INPUT);
digitalWrite(encoderPinR, HIGH);
digitalWrite(encoderPinL, HIGH);
pinMode(buttonPin, INPUT);
Serial.begin(9600); // initialize serial interface
}
void loop() {
// Drehknopf abfragen
state = (digitalRead(encoderPinL) << 1) | digitalRead(encoderPinR);
if (state != prevstate) {
if (state == nextEncoderState[prevstate]) count++;
else if (state == prevEncoderState[prevstate]) count--;
Serial.println(count, DEC); // Drehknopfwert im Serial Monitor ausgeben
prevstate = state;
}
// Button abfragen
buttonValue = digitalRead(buttonPin);
if (buttonValue == HIGH) Serial.println("gedrueckt"); // wenn Button gedrueckt, "gedrueckt" im Serial Monitor ausgeben
}
