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);
}
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.
PaoloP:
Sbagliato.... con unsigned long si pianta dopo 49 giorni e qualche ora. ]
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.