Guten Abend,
ich habe es jetzt mal mit Funktionen versucht zu schreiben. Meint ihr es so in der Art?
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte hal = 3;
const byte encoderPinA = 10; // Phase A vom Drehencoder
const byte encoderPinB = 11; // Phase B vom Drehencoder
const byte tasterEnter = 12; // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0; // gespeicherter Encoderwert
int encoderGedrueckt = 0; // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH; // Taster im Encoder
int gleisAlt = 0; // Scheibe Position alt
int gleisNeu = 0; // Position welche die Scheibe anfahren soll
bool enter = false; // Bestätigung das der Encoder gedrückt wurde
int schritte = 0; // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss
int sensor = LOW;
bool start = false;
bool ergebnis = false;
unsigned long encoderDruckzeit; // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200; // Zeit die nach der betätigung eines Tasters gewartet wird
unsigned long startZeit;
unsigned long interval = 2000;
unsigned long vergangeneZeit = 0;
void setup() {
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
pinMode(tasterEnter, INPUT);
pinMode(hal, INPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Encoder");
lcd.setCursor(0, 1);
lcd.print("Test");
delay (2000);
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Wert");
lcd.setCursor(0, 1);
lcd.print(encoderWert);
}
void loop() {
encoder_lesen();
schritt();
schritteZaehlen();
}
void encoder_lesen () {
messungPin1 = digitalRead(encoderPinA);
if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
if (digitalRead(encoderPinB) == HIGH) {
if (encoderWert < 48) encoderWert++ ;
} else {
if (encoderWert > 1) encoderWert-- ;
}
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Wert");
lcd.setCursor(0, 1);
lcd.print(encoderWert);
}
encoderTaster = digitalRead(tasterEnter);
if (encoderTaster == LOW)
{
encoderDruckzeit = millis();
encoderGedrueckt = 1;
}
if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt == 1) {
wertSpeichern = encoderWert;
Serial.println(wertSpeichern);
encoderGedrueckt = 0;
enter = true;
}
messungPin1Alt = messungPin1;
}
void schritt () {
if (enter == true) {
gleisNeu = wertSpeichern;
schritte = abs (gleisNeu - gleisAlt);
Serial.print ("benoetigte Schritte ");
Serial.println(schritte);
//gleisAlt = wertSpeichern;
Serial.println(gleisNeu);
Serial.println(gleisAlt);
Serial.println(enter);
enter = false;
ergebnis =true;
}
}
void schritteZaehlen () {
sensor = digitalRead (hal);
startZeit = millis();
if ((schritte != 0)&& (ergebnis == true)){
start = true;
if ((startZeit - vergangeneZeit >= interval) && (sensor == LOW) && (start ==true)) {
vergangeneZeit = startZeit;
schritte--;
Serial.println("Schritte");
Serial.println(schritte);
}
}
else if (schritte == 0){
start = false;
Serial.println("Ziel");
ergebnis = false;
gleisAlt = wertSpeichern;
}
}
Edit: Code geändert