Du hast glaube ich einen Denkfehler im Programm. Es ist
verkehrstechnisch unklug, zuerst einen kompletten Zyklus von Ampel1 zu
programmieren, bevor die Ampel2 das erste Mal angesprochen wird. In
dieser Zeit hängen schon die ersten Autos aufeinander ;-)
Es hilft zuerst eine Tabelle zu machen, in der der Zeiten und Zustände
der Ampellichter notiert sind
Zeit A B C D E F G H A wiederholen
Ampel1-rot 0 1 1 1 1 1 1 1
Ampel1-gelb 0 1 0 0 0 0 0 1
Ampel1-grün 1 0 0 0 0 0 0 0
Ampel2-rot 1 1 1 0 0 1 1 1
Ampel2-gelb 0 0 0 1 0 1 0 0
Ampel2-grün 0 0 0 0 1 0 0 0
Die einzelnen Phasen A,B,C... kann man dann den gewünschten
Warte-/Fahrzeiten anpassen. Ich würde aus obigem Grund auch in jedem
Zustand immer alle Ampellampen setzen/löschen.
Bei einem fortgeschrittenen Programm bietet sich sogar eine Schleife an,
bei der die Steuerzeiten und die Zustände eines kompletten Ports aus
zwei Data Statements gelesen werden.
Bei einem noch fortgeschritteneren Programm würde man den Zeitgeber
nicht durch wait Statements zwischen den Zuständen A,B,...
programmieren, sondern einen Timerinterrupt als Zeitscheibenantrieb
benutzen. Dann kann das Programm in den "Wartezeiten" noch andere Sachen
machen z.B. Anzahl der Autos zählen oder MP3s für die Fussgänger
abspielen ;-)