const int leftButton = 2; // Linker Taster
const int rightButton = 3; // Rechter Taster
// Linke Ampel LEDs
const int leftGreen = 4; // Grüne LED für linke Ampel
const int leftYellow = 5; // Gelbe LED für linke Ampel
const int leftRed = 6; // Rote LED für linke Ampel
// Rechte Ampel LEDs
const int rightRed = 7; // Rote LED für rechte Ampel
const int rightYellow = 8; // Gelbe LED für rechte Ampel
const int rightGreen = 9; // Grüne LED für rechte Ampel
// Ampelzustände
int leftState = 0; // 0 = Grün, 1 = Gelb, 2 = Rot
int rightState = 2; // 2 = Rot, 1 = Gelb, 0 = Grün
// Entprellung
unsigned long lastDebounceTimeLeft = 0;
unsigned long lastDebounceTimeRight = 0;
const unsigned long debounceDelay = 200; // Entprellzeit
void setup() {
// Taster-Pins als Eingänge konfigurieren (mit Pull-Up-Widerstand)
pinMode(leftButton, INPUT_PULLUP);
pinMode(rightButton, INPUT_PULLUP);
// LEDs als Ausgänge konfigurieren
pinMode(leftGreen, OUTPUT);
pinMode(leftYellow, OUTPUT);
pinMode(leftRed, OUTPUT);
pinMode(rightRed, OUTPUT);
pinMode(rightYellow, OUTPUT);
pinMode(rightGreen, OUTPUT);
// Anfangszustand der Ampeln setzen
updateLights();
}
void loop() {
unsigned long currentTime = millis(); // Aktuelle Zeit erfassen
// Linker Taster gedrückt
if (digitalRead(leftButton) == LOW && currentTime - lastDebounceTimeLeft > debounceDelay) {
lastDebounceTimeLeft = currentTime; // Zeit für Entprellung speichern
if (leftState != 0) { // Schalten nur, wenn nicht bereits grün
changeToGreen("left");
}
}
// Rechter Taster gedrückt
if (digitalRead(rightButton) == LOW && currentTime - lastDebounceTimeRight > debounceDelay) {
lastDebounceTimeRight = currentTime; // Zeit für Entprellung speichern
if (rightState != 0) { // Schalten nur, wenn nicht bereits grün
changeToGreen("right");
}
}
}
// Funktion, um die Ampeln zu schalten
void changeToGreen(String side) {
if (side == "left") {
// Linke Ampel schaltet zu Gelb
digitalWrite(leftRed, LOW);
digitalWrite(leftYellow, HIGH);
delay(1000); // Gelb für 1 Sekunde
// Rechte Ampel schaltet zu Gelb
digitalWrite(rightGreen, LOW);
digitalWrite(rightYellow, HIGH);
delay(1000); // Gelb für 1 Sekunde
// Linke Ampel schaltet zu Grün
digitalWrite(leftYellow, LOW);
digitalWrite(leftGreen, HIGH);
// Rechte Ampel schaltet zu Rot
digitalWrite(rightYellow, LOW);
digitalWrite(rightRed, HIGH);
// Zustände aktualisieren
leftState = 0; // Grün
rightState = 2; // Rot
} else if (side == "right") {
// Rechte Ampel schaltet zu Gelb
digitalWrite(rightRed, LOW);
digitalWrite(rightYellow, HIGH);
delay(1000); // Gelb für 1 Sekunde
// Linke Ampel schaltet zu Gelb
digitalWrite(leftGreen, LOW);
digitalWrite(leftYellow, HIGH);
delay(1000); // Gelb für 1 Sekunde
// Rechte Ampel schaltet zu Grün
digitalWrite(rightYellow, LOW);
digitalWrite(rightGreen, HIGH);
// Linke Ampel schaltet zu Rot
digitalWrite(leftYellow, LOW);
digitalWrite(leftRed, HIGH);
// Zustände aktualisieren
rightState = 0; // Grün
leftState = 2; // Rot
}
}
// Funktion zur Aktualisierung der LEDs entsprechend der Zustände
void updateLights() {
// Linke Ampel
digitalWrite(leftGreen, leftState == 0);
digitalWrite(leftYellow, leftState == 1);
digitalWrite(leftRed, leftState == 2);
// Rechte Ampel
digitalWrite(rightGreen, rightState == 0);
digitalWrite(rightYellow, rightState == 1);
digitalWrite(rightRed, rightState == 2);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C