Problema con "delay" , luci stroboscopiche

Ciao ragazzi , ho collegato al mio arduino un amplificatore per poter creare delle luci stroboscopiche , i valori letti dall'ingresso analogico volevo mostrarli sul display seriale .

Siccome non potevo utilizzare la funzione delay() , poiché avrebbe interrotto le luci , ho creato questa piccola funzione che mi avrebbe stampato ogni 500 millisecondi il valore ma senza bloccare il ciclo (una specie di delay asincrono);

int led = 13;
int tempo , fatto = 0;

void asinkDelay (int attesa){  // ecco la funzione
  
if(fatto != 1){     // memorizza il tempo 
    tempo = millis() + attesa;
    fatto = 1;
  }
  if(fatto == 1){
    if(millis() >= tempo){   // controlla se ha superato il tempo memorizzato
      Serial.println(millis());  
      fatto = 0;
    }
  }
}

void setup(){   
  pinMode( led , OUTPUT);
  Serial.begin(9600);
}

void loop(){

  digitalWrite(led , HIGH);
  delay(100);
  digitalWrite(led , LOW);
  delay(100);
  asinkDelay(500);

}

non so per quale motivo , la funzione per un certo periodo funziona , dopo di che smette di stampare. :(

mi sapreste aiutare? vi ringrazio in anticipo :)

Devi dichiarare la variabile “tempo”, come unsigned long
Il perche’ devi capirlo da solo

Avevi ragione funziona , la motivazione è che il numero cresce continuamente fino a quando la variabile non potrà contenere il numero . 8)
Ma questo vuol dire che anche con unsigned long prima o poi si fermera .
esiste una funziona come quella che ho creato ?

leggi questo articolo

http://www.leonardomiliani.com/2012/come-gestire-loverflow-di-millis/

ok ... ho appena scoperto che dovrei lasciare acceso il mio arduino per un paio di giorni prima che la funzione smetta di funzionare ... per quanto mi riguarda io non lo mai lasciato per più di 5 minuti acceso :D

ti ringrazio per avermi aiutato !

Antonio97: Ciao ragazzi ,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Invece della tua funzione usa l'esempio Blink without delay che non soffre del problema da te citato.