Problème de mesure de temps

Le timer qui sert à la mesure du temps est le timer 0.
Ce timer est configuré par Arduino en fonction de divers paramètres réagissant sur l'homogénéité de l'environnement.

La fonction arduino : init(), qui n’apparaît pas dans le fichier ino mais qui y est incluse par l'IDE avant la compilation et se lance en début de programme, règle le diviseur d'horloge_timer 0 à 64 --> 16MHZ/64 = 250 kHz soit une période de 4µs --> tu as l'explication de ce que tu constate.

Tu peux modifier les réglages des timers pour avoir un pas de mesure plus petit.
Attention si le timer 0 est modifié les fonctions delay(), millis(), micro(), PWM sur D5 et D6 auront un comportement différent.
Le mieux est d'utiliser un autre timer comme le timer 2 --> on lit la valeur de son compteur --> registre TCNT2
Remarque : la fréquence de la PWM sur les sorties D3 et D11 sera modifiée.

Avec un diviseur d'horloge de 1, le pas de mesure du timer est d'un cycle horloge soit 62,5 ns (avec un quartz de 16 MHz).
Il suffit après de lire le registre du compteur du timer (TCNTx).
Les diviseurs disponibles sur le timer 2 sont :1, 8, 64.

Avec un diviseur = 8 tu aurais un pas de mesure de 0,5µs et 62,5ns avec un diviseur par 1

Les fonctions arduino sont réductrices et n'exploitent pas la totalité des possibilités du microcontrôleur.
Pour aller plus loin la meilleure solution est la lecture de la datasheet du micro, celle qui est écrite par Atmel et a télécharger uniquement à partir du site d'Atmel si tu ne veux pas avoir une ancienne version.

Voici comment je fais :
uint8_t lecture ; // le timer 2 est un timer 8 bits, pour lire son compteur je déclare une variable sur 1 octet
TCCR2B = 0b00000001; // écriture dans le registre TTCR2B pour fixer le diviseur de l'horloge du timer par 1
TCNT2 = 0; // je force le compteur du timer à prendre la valeur 0 --> pour faire plus simple
{action qui est à mesurer}
lecture = TCNT2 ;
{ ton traitement de lecture}