Semaforo Complesso OK-Flip Flop Semplice ( e non ci salto fuori).

Io creerei una struttura del genere

void loop(){
controllopulsanti();
controllotempo();
comandasemafori();
}

il codice deve girare sempre senza delay usando la funzione millis() per determinare lo stato di accensione delle varie luci.
Userei poi una struttura per definire i semafori e passare i parametri da una funzione all'altra.