// DEKLARATIONEN
// Wie lange gewartet wird zu einer Umschaltung
int wait1 = 10;
// Phasenlänge
int duration1 = 100;
// Ampel Status
int state = -1;
// Timer
int timer = 0;
// neue Zeit
int newState = 0;
// Pins für die Ampeln
int a1r = 2;
int a1y = 3;
int a1g = 4;
int a2r = 5;
int a2y = 6;
int a2g = 7;
int bb1 = 8;
int bb2 = 9;
int previousButtonState1 = HIGH;
int previousButtonState2 = HIGH;
void setState(int newState);
void setup() {
// Pin-Modi einstellen
pinMode(a1r, OUTPUT);
pinMode(a1y, OUTPUT);
pinMode(a1g, OUTPUT);
pinMode(a2r, OUTPUT);
pinMode(a2y, OUTPUT);
pinMode(a2g, OUTPUT);
pinMode(bb1, INPUT_PULLUP);
pinMode(bb2, INPUT_PULLUP);
// Startzustand: beide Ampeln auf Rot
state = 0;
delay(wait1*1000);
}
void loop() {
setState(newState);
timer += 20;
if (timer > duration1){
newState = state + 1;
} else if (newState == 8){
newState = 0;
}
timer = 0;
setState(newState);
if (bb1 == LOW){
state = 0;
timer = 0;
}
if (bb2 == LOW){
state = 0;
timer = 0;
};
}
void setState(int newState) {
if (state != newState) {
if (newState == 0) {
setLights(0);
} else if (newState == 1) {
setLights(1);
} else if (newState == 2) {
setLights(2);
} else if (newState == 3) {
setLights(3);
} else if (newState == 4) {
setLights(4);
} else if (newState == 5) {
setLights(5);
} else if (newState == 6) {
setLights(6);
} else if (newState == 7) {
setLights(7);
} else if (newState == 8) {
setLights(8);
}
state = newState;
}
}
// Funktion zur Steuerung der Ampeln
void setLights(int state) {
// Alle Ampeln ausschalten
digitalWrite(a1r, LOW);
digitalWrite(a1y, LOW);
digitalWrite(a1g, LOW);
digitalWrite(a2r, LOW);
digitalWrite(a2y, LOW);
digitalWrite(a2g, LOW);
switch(state) {
case 0:
// Zustand 0 - a1r, a2r
digitalWrite(a1r, HIGH);
digitalWrite(a1y, LOW);
digitalWrite(a2r, HIGH);
break;
case 1:
// Zustand 1 - a1r, a1y, a2r
digitalWrite(a1r, HIGH);
digitalWrite(a1y, HIGH);
digitalWrite(a2r, HIGH);
break;
case 2:
// Zustand 2 - a1g, a2r
digitalWrite(a1r, LOW);
digitalWrite(a1y, LOW);
digitalWrite(a1g, HIGH);
digitalWrite(a2r, HIGH);
break;
case 3:
// Zustand 3 - a1y, a2r
digitalWrite(a1g, LOW);
digitalWrite(a1y, HIGH);
digitalWrite(a2r, HIGH);
break;
case 4:
// Zustand 0 - a1r, a2r
digitalWrite(a1r, HIGH);
digitalWrite(a1y, LOW);
digitalWrite(a2r, HIGH);
break;
case 5:
// Zustand 4 - a1r, a2r, a2y
digitalWrite(a1r, HIGH);
digitalWrite(a2r, HIGH);
digitalWrite(a2y, HIGH);
break;
case 6:
// Zustand 5 - a1r, a2g
digitalWrite(a2y, LOW);
digitalWrite(a2r, LOW);
digitalWrite(a2g, HIGH);
digitalWrite(a1r, HIGH);
break;
case 7:
// Zustand 6 - a1r, a2y
digitalWrite(a1r, HIGH);
digitalWrite(a2g, LOW);
digitalWrite(a2r, LOW);
digitalWrite(a2y, HIGH);
break;
case 8:
// Zustand 0 - a1r, a2r
digitalWrite(a1r, HIGH);
digitalWrite(a1y, LOW);
digitalWrite(a2r, HIGH);
break;
}
}