leggere il tempo di 2 valori/input digitali piu precisi possibili

salve e auguri, devo leggere il tempo di 2 valori/input a 12 volt circa ( iniettori automobile)
i valori dovrebbero aggirarsi come minimo e massimo tra 3 millisecondi e 17 millisecondi,
la frequenza va da 800 a 9000 volte al minuto (giri motore)

non e importante che acquisisce tutti i valori sempre va bene anche una volta ogni 2-3 secondi
mi interessa che quando legge i due valori li legge il più precisamente possibile e me li spedisce sul un display

ho un arduino nano
idea volevo mettere un semplice partitore per prendere l'impulso imput
e usare gli interrupt per far prendere a una variabile il valore di micros()

sono nella direzione giusta?

Se un errore di circa 5µs è accettabile si.

Interrupt di tipo on change.

Ad ogni interrupt memorizzi micros, e in base al livello dell'ingresso lo salvi in una variabile temporanea (inizio impulso) o fai la differenza col tempo salvato prima (fine impulso).

ho scritto questo ovviamente per una sola lettura
può funzionare?

unsigned long start_in_b;
unsigned long end_in_b;
unsigned long tempo_b;

void setup() {
attachInterrupt(digitalPinToInterrupt(2),in_b_start, RISING);
}

void loop() {
 tempo_b =  end_in_b - start_in_b;
}

void in_b_start(){
start_in_b = micros();
detachInterrupt(digitalPinToInterrupt(2));
attachInterrupt(digitalPinToInterrupt(2),in_b_end, FALLING);
}

void in_b_end(){
end_in_b = micros();
detachInterrupt(digitalPinToInterrupt(2));
attachInterrupt(digitalPinToInterrupt(2),in_b_start, RISING);
}

Ma sei sicuro che l' inettore faccia un apertura unica e non aperture multiple?
È un diesel o benzina?
Ciao Uwe

uwefed:
Ma sei sicuro che l' inettore faccia un apertura unica e non aperture multiple?
È un diesel o benzina?
Ciao Uwe

benzina, il tempo si aggira da un minimo 3 millisecondi a circa 20
l'apertura dovrebbe essere unica gli iniettori dovrebbero essere dei semplici solenoidi
almeno in questo caso (no piezoelettrici)

comunque indipendentemente dal fatto che siano iniettori o meno
questo scketch va nella direzione giusta per quello che deve misurare
oppure c'è qualcosa di meglio?

unsigned long start_in_b;
unsigned long end_in_b;
unsigned long tempo_b;

void setup() {
attachInterrupt(digitalPinToInterrupt(2),in_b_start, RISING);
}

void loop() {
 tempo_b =  end_in_b - start_in_b;
}

void in_b_start(){
start_in_b = micros();
detachInterrupt(digitalPinToInterrupt(2));
attachInterrupt(digitalPinToInterrupt(2),in_b_end, FALLING);
}

void in_b_end(){
end_in_b = micros();
detachInterrupt(digitalPinToInterrupt(2));
attachInterrupt(digitalPinToInterrupt(2),in_b_start, RISING);
}