calcolare il tempo trascorso tra impulsi

potresti provare a risolverlo in maniera più elegante ed efficiente con un interrupt;

in pratica quando ti arriva l'impulso sul pin, viene generato un interrupt che fa eseguire una funzione che ti salva in una variabile globale il valore di ritorno della millis.
prima di salvare il valore però fai la differenza con il suo valore precedente, in modo di calcolare il tempo trascorso..
esempio:

long tempo_trascorso;
long durata;

void routine_di_servizio_interrupt(){
   durata=millis()-tempo_trascorso;
   tempo_trascorso=millis();
}

void setup(){
     attachInterrupt(numero_del_pin,routine_di_servizio_interrupt,RISING);

in questo modo nella variabile globale durata hai il tempo trascorso dell'ultimo impulso...