Grazie mille, si con la parola callback mi riferivo proprio alla ISR ( piccola confusione nel linguaggio, scusa ), avevo letto del problema del non incremento di micros ( ) e millis ( ) all'interno di una ISR ma non l'avevo compreso molto bene, con quello che mi hai scritto mi è chiarissimo, grazie.
Per quanto riguarda invece la parte di programmazione, dato che ho due sensori differenti, scrivo due diverse ISR, e sto pensando a fare una cosa così:
volatile long start = 0, end = 0;
double distance = 0.10; // 10 cm di distanza
void setup ( ) {
attachInterrupt ( 0, ISR_1, RISING );
attachInterrupt ( 1, ISR_2, RISING );
Serial.begin ( 9600 );
}
void loop ( ) {
if ( end != 0 && start != 0 ) {
Serial.print ( distance / ( ( (double)(end - start) ) / 1000000 ) );
Serial.println ( " m/s" );
end = 0;
start = 0;
}
}
ISR_1 { // Fotocellula Iniziale
start = micros ( );
}
ISR_2 { // Fotocellula Finale
end = micros ( );
}
L'ho buttato giù ora mentre scrivo quindi ci potrebbe essere qualche imprecisione, però mi sembra ancora più ottimizzato, lui vede che deve fare il calcolo quando ha entrambi i tempi, volendo si potrebbe migliorare utilizzando una boolean nelle ISR per controllare che sia passato prima dalla prima fotocellula e poi dalla seconda.
Grazie, ciao ![]()