La velocidad puede ser variable pero tu ventana de medicion nunca lo será.
En realidad estamos midiendo mal.
Jamas se mide en bajas frecuencias justamente la frecuencia, sino que se debe leer el periódo. Eso tiene menos error de lectura.
En tu caso seria el tiempo entre transiciones 0-1. puedes medir muchas, promediarlas y obtener mejor resolucion.
En cambio una frencuena lenta requiere de una ventana grande. Para mejorar la precisión deberías aumentar ese tiempo que yo puse de 1 segundo a algo mayor, total es matématica.
De todos modos 1 seg siempre es un lapso mas que utilizado.
Veamos con números, dices que medirás 100 rpm = 100 1/60 rpseg = 10/6 revoluciones por segundo o Hz
ya ves que tu sistema por bueno que sea podra contar 10/6 = 1.66 rpseg
Quiere decir que la ventan permite medir 1 o 2 cuentas... MAL
Si tienes una rueda dentada de 60 dientes entonces eso mejora las cosas. Ya no seran 1 o 2 pulsos sino 100 pulsos y como pobre estarás oscilando entre 99 a 101 cuentas.
Has mejorado notablemente
Veamos ahora como período
Seguimos con un sensor por vuelta, pero ahora contamos tiempos entre disparos 0-1 o sea flanco de subida
pasa el primero y luego pasa el segundo a 6/10 seg = 0.6 seg = 600 mseg
Si usara solo millis() ya podrias leer 599/600/601 mseg sin problemas. Esta dentro de las posibilidades.
Si usaras micros() podrias leer 599999/600000/600001 useg suponiendo que lo demas no existiera
ya vez como cambia, es notable pasar de algo casi medido a otra cosa BIEN medida.