// #include <TimerOne.h>
const int ampelou[] = {1, 2, 3}; // Ampel oben/unten (1)
const int ampellr[] = {4, 5, 6}; // Ampel links/rechts (2)
bool phase = true; // toggle zwischen Ampel 1 und 2
bool pauseState = false;
unsigned long pauseStartTime = 0;
unsigned long shortPauseStart = 0;
unsigned long wechselPauseStart = 0;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
pinMode(ampelou[i], OUTPUT); // Deklaration der pins für Ampel als Output
pinMode(ampellr[i], OUTPUT); // Deklaration der pins für Ampel als Output
}
// Timer1.initialize(1000000);
// Timer1.attachInterrupt(schaltung); // Interrupt wird der Funktion "schaltung" hinzugefügt
digitalWrite(ampelou[2], HIGH);
digitalWrite(ampellr[0], HIGH);
}
void loop() {
if (pauseState) {
checkPause();
}
}
void schaltung() {
const int* ampel; // Zeiger für den toggle zwischen Ampel 1 und 2
if (phase) {
ampel = ampelou;
} else {
ampel = ampellr;
}
for (int i = 0; i < 3; i++) {
digitalWrite(ampel[i], HIGH);
wechselPause(); // Funktion für die 1 Sekunde Pause zwischen den Umschalten bspw. von Grün auf Gelb.
if (i == 2) {
for(int i = 1; i < 3; i++){
digitalWrite(ampel[i], LOW);
}
startPause(); // Entsprechende Pause der Ampeln
}
}
for (int i = 2; i >= 0; i--) {
digitalWrite(ampel[i], HIGH);
if (i == 2) {
digitalWrite(ampel[i], LOW);
}
wechselPause();
digitalWrite(ampel[i], LOW);
}
shortPause(); // 5 Sekunden Pause, wo beide Ampeln Rot sind
phase = !phase;
}
void startPause() {
pauseState = true;
pauseStartTime = millis();
// Timer1.detachInterrupt();
}
void checkPause() {
int pause; // Variable für die unterschiedlich lange Grün-Phasen
if (phase) {
pause = 20000;
} else {
pause = 15000;
}
if (millis() - pauseStartTime >= pause) {
pauseState = false;
// Timer1.attachInterrupt(schaltung);
}
}
void shortPause() {
int pause = 5000;
shortPauseStart = millis(); // Startzeit setzen
while (millis() - shortPauseStart < pause); // Warte 5 Sekunden
}
void wechselPause() {
int pause = 1000;
wechselPauseStart = millis(); // Startzeit setzen
while (millis() - wechselPauseStart < pause); // Warte 1 Sekunden
}