Sketch che va in crash dopo qualche secondo di esecuzione

Salve!
Ho scritto un semplicissimo sketch che fa lampeggiare un led con una frequenza variabile in base alla lettura di un potenziometro.

Tutto funziona egregiamente ma dopo una ventina di secondi il led smette di lampeggiare (ma lo sketch continua a girare infatti riesco ancora a leggere i dati del potenziometro inviati sul monitor seriale)

Sapreste dirmi il motivo?

lo sketch è il seguente:

#define LED 12
#define sensore A0
int t;
int fMax=60;
int fMin=2;

void setup() {
  Serial.begin(9600);
  pinMode(sensore, INPUT);
  pinMode(LED, OUTPUT);
}
void loop() {
  t=map(analogRead(sensore),0,1023,1000/fMin,1000/fMax);
  int time=millis();
  while (millis()-time<200){
    digitalWrite(LED,HIGH);
    delay(t);
    digitalWrite(LED,LOW);
    delay(t);
  }
  Serial.println(t);
}

Grazie!

Un tipo "int" contiene un numero che può andare da -32768 a 32767.
Per contenere millis devi usare un "unsigned long", altrimenti ti va in overflow dopo 32,7 secondi.

Quindi metti:

unsigned long time=millis();

Infatti ora funziona! grazie :slight_smile:

Leggiti "data types", poi leggi qui:

e dimmi come mai con unsigned long funziona, così vediamo se hai studiato XD

In pratica con unsigned long funziona senza limiti temporali solo perchè quando la variabile raggiunge il massimo anche millis() si azzera?

Che voto prendo? XD

Sbagliato.... con unsigned long si pianta dopo 49 giorni e qualche ora. ]:slight_smile:

PaoloP:
Sbagliato.... con unsigned long si pianta dopo 49 giorni e qualche ora. ]:slight_smile:

Sbagliato anche te ]:smiley:
Con questo check:

millis()-time<200

non si incorre nel problema dell'overflow di millis :stuck_out_tongue:

PaoloP:
Sbagliato.... con unsigned long si pianta dopo 49 giorni e qualche ora. ]:slight_smile:

Ma da quello che ho capito anche millis() è un unsigned long, quindi dovrebbe andare in overflow proprio quando la mia variabile "time" sta per farlo.. quindi millis() riparte da 0 e anche "time" (dato che la assegno = millis() prima del confronto.

o sbaglio?

Ti consiglio di leggere questa pagina :stuck_out_tongue:
[/quote], che avevo linkato a PaoloP

Si scusate mi sono accorto del link dopo aver postato. Cmq ora ho tutto chiaro! Devo solo fare un po di pratica per metabolizzare!

Grazie a tutti!