Millis() & Interrupt

Buongiorno

Adesso non riesco a fare una prova pratica per verificarlo ma qualcuno in un post ha affermato che
all'interno di una funzione di interrupt non è possibile utilizzare la funzione millis() neppure nel caso
in cui la variabile utilizzata per contenere il ritorno di millis() sia stata definita come Globale ? Ecco
un esempio pratico :

unsigned long TIME= 0;

void setup()
{
attachInterrupt(0, myInterrupt, CHANGE);
}

void loop()
{
....
}

void myInterrupt()
{
TIME = millis();
}

E' vera questa cosa ? Ok questa sera farò questo test ma se intanto ne discutiamo da qua a stasera
posso ragionare un'altra strategia.

Grazie
Drake

drakelive:
ma qualcuno in un post ha affermato che
all'interno di una funzione di interrupt non è possibile utilizzare la funzione millis()
[...]
E' vera questa cosa ? Ok questa sera farò questo test ma se intanto ne discutiamo da qua a stasera
posso ragionare un'altra strategia.

Puoi usare la funzione in un interrupt. La cosa che non funziona che e l'aggiornamento durante l'interrupt perche' altri interrupt non sono permessi (il timer in questo caso).

Tra altro, dichiara una variable cambiata in un interrupt con:

volatile unsigned long t;

Oltretutto se il codice che inserisci nell’interrupt rallenta il sistema, poi ne risente anche il conteggio del tempo, alterandosi.