Problema con millis e while

Ciao a tutti io sto costruendo un mio piccolo programmino alla quale dovrei far fare dei ragionamenti al Arduino in 5 secondi quindi apro un ciclo while con l'Arduino e dico mentre millis non e ancora arrivato ad esser > di 5000 millisecondi svolgi questa funzione, fino a qui tutto bene ma il mio problema e che dato che millis parte subito appena lancio il programma se io vado a verificare la mia funzione dopo 5 secondi non funziona niente perché sono già passati 5000 millisecondi. quindi come posso far in modo da tenere sempre aggiornato Arduino quindi fare una specie di start timer quando si presenta vera la funzione del ciclo if e dopo 5 secondi si disattivi.

Spero di esse stato abbastanza chiaro per qualsiasi dubbio chiedete pure buona serata a tutti vi posto il codice che ho messo giù fin ora ciao

if(prova == 1 )
{

digitalWrite(13, HIGH);

while (millis() < 50000)
{

threshold = analogRead(electret);

if (threshold > sensorMax) {
sensorMax = threshold;
}

}

digitalWrite(13, LOW);
threshold = sensorMax;

ledon();

}

Forse potrebbe aiutarti questo articolo in cui spiego come si programmano i compiti con la funzione millis().

Salvi il tempo in una variabile, ad esempio

unsigned long timestart = millis();

poi il while lo strutturi come

 while (millis()-timestart < 50000) 
   {
     ......

grazie mille per le risposte io ho provato paolo a fare come mi hai detto te ma mi ritrovo con lo stesso problema perché funzionerebbe solamente appena si attiva il programma invece io vorrei che questa funzioni si effettuasse sempre anche oltrepassati i 5 secondi del avvio del millis(); come posso fare io dovrei dirgli praticamente che a ogni 5 secondi si deve verificare questa funzione ma purtroppo come fino ad ora la funzione si verifica solamente finché i millis non arrivano a 5000 poi per altre prove lui non funzionerebbe più.

Come detto da @paolo metti l'inizializzazione di timestart.
Poi timestart deve essere riletto ogni volta che son passati i famosi 5 secondi. Ma con un if, il while non serve.
prova così:

if(prova == 1 )       
{ digitalWrite(13, HIGH);
  if(millis()-timestart >50000)   // se passati 5 secondi da ultimo timestart
  { threshold = analogRead(electret);
    if (threshold > sensorMax) 
    {  sensorMax = threshold;
    }
    timestart=millis();             // rilegge millis() attuale
  }
  digitalWrite(13, LOW);
  threshold = sensorMax;
  ledon();
}

P.S. non servono a molto quegli 8 kg di spazi.

?? si è cancellato

Da soli non ci si può cancellare.
O ha chiesto di essere cancellato oppure è stato fatto per qualcosa di cui non sono a conoscenza, però.

Non sono stato io.

magari si è registrato usando un carattere strano usando combinazioni del tastierino numerico, che sò, 255 ?

hai ragione, il profilo esiste (quindi NON si è cancellato)... nice hack :grin:

Come mi ha fatto notare Uwe, l'utente può cambiare il suo nick. Probabilmente aveva per sbaglio svuotato quel campo, quindi appariva "senza nome".