Um eine genaue Messung zu haben genügt das polling eines Eingangs nicht. Die mögliche Auflösung hängt vom restliche Kode ab, wie oft der zuläßt daß die Eingangskontrollfunktion durchlaufen wird.
Eine Lösung ist der Interrupt. Beim der Steigenden flanke wird die millis()oder micros() - Zeit zwischen gespeichert und bei der fallenden auch wieder und ein Statusbit gesetzt (damit die Interruptfunktion klein bleibt). In der loop Schleife wird bei gesetztem Statusbit die Differenzzeit berechnet und das Statusbit rückgesetzt.
Grüße Uwe