Inkrementaler Drehgeber
Verfasst: Do 8. Apr 2021, 20:03
Ich habe übrigens heute das erste mal die RotaryEncoder Software in Betrieb genommen und der erste Test läuft. Muss ich noch zerpflücken dass ich weiß wie das alles geht. Habe das Signal gleich Hardwaremässig entprellt, dass ich in der Software nichts tun muß. Habe noch nicht mal mein Display dran
Die Daten gehen im Moment per Serial.println() raus
Der Entcoder hat auch noch eine Taste mit drin, also drehen zum Einstellen und drücken zum Bestätigen.
Dann kommt der große Drehgeber dran. Der wird wohl nicht so einfach laufen. Aber wird schon werden
Gute Nacht
Franz
. Hier ist der Code zum Testen:
Jetzt habe ich es mal auf dem Mega instaliert mit nem Display:


Dann kommt der große Drehgeber dran. Der wird wohl nicht so einfach laufen. Aber wird schon werden

Gute Nacht
Franz
. Hier ist der Code zum Testen:
Code: Alles auswählen
Rotary // -----
// SimplePollRotator.ino - Beispiel für die RotaryEncoder-Bibliothek.
// Diese Klasse ist für die Verwendung mit der Arduino-Umgebung implementiert.
//
// Copyright (c) by Matthias Hertel, http://www.mathertel.de
// This work is licensed under a BSD 3-Clause License. See http://www.mathertel.de/License.aspx
// More information on: http://www.mathertel.de/Arduino
// -----
// 18.01.2014 created by Matthias Hertel
// 04.02.2021 Bedingungen und Einstellungen für ESP8266 hinzugefügt
// -----
// In diesem Beispiel wird der Status des Drehgebers in der Funktion loop () überprüft.
// Die aktuelle Position und Richtung wird bei Änderung auf auf Serial.println() ausgegeben.
// Hardware setup:
// Attach a rotary encoder with output pins to
// * A2 and A3 on Arduino UNO.
// * D5 and D6 on ESP8266 board (e.g. NodeMCU).
// Swap the pins when direction is detected wrong.
// The common contact should be attached to ground.
#include <Arduino.h>
#include <RotaryEncoder.h>
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO_EVERY)
// Example for Arduino UNO with input signals on pin 2 and 3
#define PIN_IN1 2
#define PIN_IN2 3
#elif defined(ESP8266)
//Beispiel für ESP8266 NodeMCU mit Eingangssignalen an Pin D5 und D6
#define PIN_IN1 D5
#define PIN_IN2 D6
#endif
// Richten Sie einen RotaryEncoder mit 4 Schritten pro Latch für die 2 Signaleingangspins ein:
RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);
// Richten Sie einen RotaryEncoder mit 2 Schritten pro Latch für die 2 Signaleingangspins ein:
//RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);
void setup()
{
Serial.begin(115200);
while (! Serial);
Serial.println("Simples PollRotator-Beispiel für die RotaryEncoder-Bibliothek.");
} // setup()
// Lesen die aktuelle Position des Encoders aus und gebe sie aus, wenn sie sich ändert.
void loop()
{
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos != newPos) {
Serial.print("pos:");
Serial.print(newPos);
Serial.print(" dir:");
Serial.println((int)(encoder.getDirection()));
pos = newPos;
} // if
} // loop ()
// The End
Code: Alles auswählen
#include <Arduino.h>
#include <RotaryEncoder.h>
#include <LiquidCrystal_I2C.h> // LCD Display
// LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//Arduino MEGA mit Eingangssignal auf pin 8 und 9
#define PIN_IN1 8
#define PIN_IN2 9
// Richten Sie einen RotaryEncoder mit 4 Schritten pro Latch für die 2 Signaleingangspins ein:
RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);
// Richten Sie einen RotaryEncoder mit 2 Schritten pro Latch für die 2 Signaleingangspins ein:
//RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);
int newPos;
void setup()
{
Serial.begin(115200);
while (! Serial);
//-----------LCD Display Start----------------------------------------
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
lcd.setCursor (3, 0);
lcd.print (F("RotaryEncoder"));
lcd.setCursor (0, 2);
lcd.print (F("Ausgabe = "));
}
void loop()
{
static int pos = 0;
encoder.tick();
newPos = encoder.getPosition();
if (pos != newPos) {
//Serial.print("pos:");
//Serial.print(newPos);
//Serial.print(" dir:");
//Serial.println((int)(encoder.getDirection()));
lcd.setCursor (12, 2);
lcd.print (F(" "));
lcd.setCursor (12, 2);
lcd.print (newPos);
pos = newPos;
}
}