

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;
}
}