RPM Interrupiones, nuestro de 10 ms

Sucede que estoy trabajado en el código para contar las rpm por medio de un encoder de cuadratura, todo bien, el código funciona y me cuenta 3300 rpm
El problema es que yo tengo un tiempo de muestreo de 10 milisegundos, pero pra que el código funcione debo tener un delay(100), si disminuyo ese delay las rpm que cuenta el Arduino también disminuyen,

qué puedo hacer, necesito ayuda!!
La fórmula que use es (rev contadas/ rev totales) *(1/tiempo de muestreo ) * (60 segundos )

Gracias espero me puedan ayudar, me serviría demasiado

No uses la función delay() porque detienes la ejecución de todo el boceto.

Hay dos alternativas:

  1. Usar millis() para medir el tiempo de cuando ejecutar tareas.
unsignet long t = 0;
unsignet long t1 = 100; //Periodo 1
unsignet long t2 = 200; //Periodo 2
unsignet long t10 = 0;   //Ultima ejecución evento 1
unsignet long t20 = 0;   //Ultima ejecución evento 2

void setup() {
   /Lo que corresponda
}

void loop(){
   t = millis();

   if (t - t10) > t1){
      //Ejecuta evento 1
      t10 = t;
   }
   if (t - t20) > t2){
      //Ejecuta evento 2
      t20 = t;
   }
}
  1. Usar interrupciones programadas.