[Risolto]semaforo con fotocellule e conto alla rovescia

Devi usare la funzione millis, che restituisce il numero di millisecondi dall'avvio di Arduino.
Quando rilevi il passaggio dalla fotocellula (o la pressione del pulsante), imposti una variabile con il contenuto di millis sommato all'intervallo che vuoi misurare, metti una variabile booleana a trueed entri in un ciclo while. All'interno del ciclo devi leggere costantemente il pin a cui hai collegato il sensore/pulsante. Nel momento in cui cambia di stato, esci dal while con break.
Altrimenti la condizione di chiusura del ciclo while è che millis sia maggiore del valore di millis sommato all'intervallo. Al di fuori del while controlli la variabile booleana: se è false, allora sei uscito dal ciclo per disattivazione della lettura (vuol dire che l'utente ha tolto il dito dal pulsante), se è true, significa che il sensore/pulsante è rimasto attivato per più dell'intervallo.

In pseudocodice:

uscita_programmata = millis + intervallo
pressione_continua = true
do
  if (lettura_sensora != stato_programmato)
    pressione_continua = false
    break
  endif
while (millis <= uscita_programmata)
if (pressione_continua == true) 
  ....sensore interrotto per tutto l'intervallo
else
  ....dito staccato prima del tempo
endif

Te l'ho messo in pseudo codice perché devi essere tu a riportarlo in linguaggio Arduino, altrimenti non impari