io vedo alcune considerazioni:
il semaforo è chiaramente un oggetto che "chiama" gli array
mi spiego:
è chiaramente composto da alcune paline tra loro tutte uguali, che si comportano in modo simile ma sfasate nel tempo
quindi "descrivere" un semaforo con un array è scelta naturale
inoltre la necessità di escludere le delay dal ciclo, associata a una serie pressocche infinita di tempi di attesa fa facilmete pensare a una tabella di tempi da far rispettare alla millis
da qui leggere da una tabella una riga di configurazione del semaforo mi sembra un passo logico
riga che comprenda anche il tempo di durata della configurzione del semaforo
non è difficile, basta leggersi un poco di documentazione sugli array
gli array più semplici da capire sono le stringhe di c
e se si usano solo le lettere si può anche pensare di usare codici mnemonici
e fare qualcosa del tipo:
tutto maiuscolo
prima lettera prima palina (e terza) a fare la via uno
seconda lettera seconda palina (e quarta) a fare la via due
R rosso
V verde
G giallo (col verde acceso)
P verde pedonale (rosso pedonale è semplicemente l'opposto)
B verde pedonale con buzzer acceso
terza lettera tempo di durata
A 5 secondi (sovrapposizione dei rossi)
B 15 secondi (giallo)
C 1 minuto verde sulla via a minore priorità
D 2 minuti verde sulla via a maggiore priorità
quarta lettera numero (cifra)
indica quale riga di luci sarà la prossima
in questa maniera il semoforo si puo' descrivere circa così:
0RRA1 che significa sovrapposizione rossi, 5 secondi, prossima è la riga 1
1RVC2 che significa Rosso in uno verde in due, durata un minuto, prossima la 2
2RGB3 che significa Rosso in 1, giallo in 2, tra 15 secondi cambia in 3
3RRA4 sovrapposizione dei rossi, tra 5 secondi cambia in 4
4VRD5 verde in due rosso in uno, tra minuti cambia in 5
5GRB0 giallo in uno, rosso in due tra 15 secondi cambia in 0 (ricomincia)
sembra un casino, invece ha due grandi vantaggi:
uno: si può scrivere una funzione che interpreti la stringa,
quindi la loop si limita a mandare in esecuzione la stringa
comodo in debug
due:
facile intercettare punti topici per fare cose in più
ovvero basta scrivere delle sequenze "particolari" per mandarle in esecuzione
il passaggio pedoni diventa
6PPC7 Verde pedone su due vie, rosso ovunque, tra un minuto evolve in 7
7BBB0 Verde pedone su due paline, rosso ovunque, buzzer acceso, tra 15 secondi evolve in 0
siccome zero fa parte della sequenza principale non ho bisogno d'altro per far proseguire normalmente il semaforo
anche per far intervenire il pedonale non devo fare altro che mandare in esecuzione la riga 6