#define sensorB1 2 // Pin für Sensor B1
#define sensorB2 3 // Pin für Sensor B2
#define schalterS 4 // Pin für den Freigabeschalter S
#define leuchtmelderP1 5 // Pin für Leuchtmelder P1 (Rechtsdrehung)
#define leuchtmelderP2 6 // Pin für Leuchtmelder P2 (Linksdrehung)
// Variablen für die Sensorzustände
bool B1 = false;
bool B2 = false;
bool B1_alt = false;
bool B2_alt = false;
bool B1_Flanke = false;
bool B2_Flanke = false;
void setup() {
// Pins initialisieren
pinMode(sensorB1, INPUT_PULLUP);
pinMode(sensorB2, INPUT_PULLUP);
pinMode(schalterS, INPUT_PULLUP);
pinMode(leuchtmelderP1, OUTPUT);
pinMode(leuchtmelderP2, OUTPUT);
// Anfangszustand der Leuchtmelder
digitalWrite(leuchtmelderP1, LOW);
digitalWrite(leuchtmelderP2, LOW);
}
void loop() {
// Schalterzustand prüfen
if (digitalRead(schalterS) == LOW) {
// Drehrichtungsanzeige deaktivieren, wenn der Schalter nicht aktiviert ist
digitalWrite(leuchtmelderP1, LOW);
digitalWrite(leuchtmelderP2, LOW);
return;
}
// Sensorzustände einlesen
B1 = !digitalRead(sensorB1); // Negation, falls aktiv LOW
B2 = !digitalRead(sensorB2); // Negation, falls aktiv LOW
// Flankenerkennung für Sensor B1
if (B1 && !B1_alt) {
B1_Flanke = true;
} else {
B1_Flanke = false;
}
// Flankenerkennung für Sensor B2
if (B2 && !B2_alt) {
B2_Flanke = true;
} else {
B2_Flanke = false;
}
// Drehrichtungserkennung
if (B1_Flanke && B2) {
// Rechtsdrehung erkannt
digitalWrite(leuchtmelderP1, HIGH);
digitalWrite(leuchtmelderP2, LOW);
} else if (B2_Flanke && B1) {
// Linksdrehung erkannt
digitalWrite(leuchtmelderP1, LOW);
digitalWrite(leuchtmelderP2, HIGH);
} else {
// Keine Bewegung oder unklare Richtung
digitalWrite(leuchtmelderP1, LOW);
digitalWrite(leuchtmelderP2, LOW);
}
// Alte Sensorzustände aktualisieren
B1_alt = B1;
B2_alt = B2;
}