byte auto_ampel_gruen = 13;
byte auto_ampel_gelb = 6;
byte auto_ampel_rot = 7;
byte fuss_ampel_gruen = 11;
byte fuss_ampel_rot = 10;
bool button0read = false;
bool button0on = false;
bool switch0 = false;
bool ampel_variable = true;
unsigned long button0millis = 0;
unsigned long led0millis = 0;
unsigned long issue0millis = 0;
byte ampel_state;
void setup() {
pinMode(auto_ampel_gruen, OUTPUT);
pinMode(auto_ampel_gelb, OUTPUT);
pinMode(auto_ampel_rot, OUTPUT);
pinMode(fuss_ampel_gruen, OUTPUT);
pinMode(fuss_ampel_rot, OUTPUT);
pinMode(12, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
}
void loop() {
unsigned long currentMillis = millis();
unsigned long elapsedtime = currentMillis - led0millis;
button0read = digitalRead(12);
byte button0issue = digitalRead(5);
if (button0read == LOW) {
button0millis = currentMillis;
}
if (button0read == HIGH && button0on == false && (currentMillis - button0millis > 20)) {
button0on = true;
}
if (button0read == LOW && button0on == true) {
button0on = false;
switch0 = !switch0;
led0millis = currentMillis;
}
if (switch0) {
// Update ampel_state based on elapsed time
if (elapsedtime <= 3000 && ampel_variable == true) ampel_state = 1;
else if (elapsedtime <= 6000 && ampel_variable == true) ampel_state = 2;
else if (elapsedtime <= 9000 && ampel_variable == true) ampel_state = 3;
else if (elapsedtime <= 12000 && ampel_variable == true) ampel_state = 4;
else if (elapsedtime <= 15000 && ampel_variable == true) ampel_state = 5;
else if (elapsedtime <= 18000 && ampel_variable == true) ampel_state = 6;
else if (elapsedtime <= 21000 && ampel_variable == true) ampel_state = 7;
else
{
led0millis = currentMillis; // Reset timer for new cycle
ampel_state = 1; // Restart cycle from state 1
}
if (button0issue == false)
{
ampel_variable = false;
ampel_state = 8;
}
else
{
ampel_variable = true;
}
switch (ampel_state) {
case 1:
digitalWrite(auto_ampel_gruen, HIGH);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 2:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, HIGH);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 3:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, HIGH);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 4:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, HIGH);
digitalWrite(fuss_ampel_gruen, HIGH);
digitalWrite(fuss_ampel_rot, LOW);
break;
case 5:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, HIGH);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 6:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, HIGH);
digitalWrite(auto_ampel_rot, HIGH);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 7:
digitalWrite(auto_ampel_gruen, HIGH);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, HIGH);
break;
case 8:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, LOW);
if (millis() - issue0millis > 500)
{
digitalWrite(auto_ampel_gelb, HIGH);
}
if (millis() - issue0millis > 1000)
{
digitalWrite(auto_ampel_gelb, LOW);
issue0millis = millis();
}
break;
default:
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, LOW);
break;
}
} else {
digitalWrite(auto_ampel_gruen, LOW);
digitalWrite(auto_ampel_gelb, LOW);
digitalWrite(auto_ampel_rot, LOW);
digitalWrite(fuss_ampel_gruen, LOW);
digitalWrite(fuss_ampel_rot, LOW);
}
}