if (!Fotocellula_1) {
if (millis() - milli_precedente > intervallo) {
if(++contatore >= 999) {
contatore = 0;
}
Riempi();
start_timeout = millis();
do {
Fotocellula_1 = digitalRead(in_NPN);
} while ((!Fotocellula_1) && (millis() - start_timeout < timeout));
}
}
Ho messo un timeout per l'uscita dal do..while. Dopo il while puoi controllare Fotocellula_1: se è a 0 vuol dire che sei uscito per timeout.