¿Cómo detectar Velocidades altas con Infrarrojo y un Arduino?

Holaaa necesito ayuda. Estoy haciendo un programa, consiste en detectar velocidades de animales con infrarrojos en secuencia, el problema es que mi código solo arroga resultados cuando son velocidades muy bajas y cuando mi animal pasa demasiado rápido no arroja resultados, ¿Que estoy haciendo mal? Sería de gran ayuda sus consejos. :’)
Este es mi código:


#include <LiquidCrystal.h>
#include <Wire.h> 
//#include <avr/wdt.h> //libreria del watchdog
//Declarar LCD y pines
LiquidCrystal lcd(7,6,5,4,3,2);
const int sensorPin = 13;
const int sensorPin2 = 10;
const int sensorPin3 = 11;
const int sensorPin4 = 9;
const int sensorPin5 = 12;
const int sensorPin6 = 8;

//const int sensorPin = 8;
/*const int sensorPin = 8;
const int sensorPin2 = 12;
const int sensorPin3 = 9;
const int sensorPin4 = 11;
const int sensorPin5 = 10;
const int sensorPin6 = 13;*/

int cont=0;
unsigned long myTime;
float v1,v2,v3,v4,v5,vprom,myt1=0,myt2=0,myt3=0,myt4=0,myt5=0,myt6=0,t1=0;
int f1=1,fo=1,f2=1,f3=1,f4=1,f5=1;
int value = 0;
int value2 = 0;
int value3 = 0;
int value4 = 0;
int value5 = 0;
int value6 = 0;
int boton;
int contprom=0;


void setup() {
  Serial.begin(9600);   //iniciar puerto serie
  pinMode(sensorPin , INPUT);  //definir pin como entrada
  pinMode(sensorPin2 , INPUT);  //definir pin como entrada
  pinMode(sensorPin3 , INPUT);  //definir pin como entrada
  pinMode(sensorPin4 , INPUT);  //definir pin como entrada
  pinMode(sensorPin5 , INPUT);  //definir pin como entrada
  pinMode(sensorPin6 , INPUT);  //definir pin como entrada
 
   //Definir las dimensiones del LCD (16x2)
  lcd.clear(); 
  lcd.begin(16,2);
  lcd.setCursor(3,0);
  lcd.print("LISTO PARA");
  lcd.setCursor(2,1);
  lcd.print("INICIAR TEST");

}
 
void loop(){
  
  value = digitalRead(sensorPin);  //lectura digital de pin
  value2 = digitalRead(sensorPin2);  //lectura digital de pin
  value3 = digitalRead(sensorPin3);
  value4 = digitalRead(sensorPin4);  //lectura digital de pin
  value5 = digitalRead(sensorPin5);  //lectura digital de pin
  value6 = digitalRead(sensorPin6);

  myTime = millis(); 
  detecta();
  prom();
} 
 
 void detecta()
 {
   if(value==HIGH && fo==1)
   {
      lcd.setCursor(3,0);
      lcd.print("LISTO PARA");
      lcd.setCursor(2,1);
      lcd.print("INICIAR TEST");
      delay(1000);
      lcd.clear();
     }

  if (value == LOW && fo==1) {
      Serial.println("Se inicio el test");
      myt1=(myTime);  //10 cm
      fo=0;
       }
   if(value2==LOW && f1==1){
     Serial.println("30cm detectados");
     myt2=millis();
     t1=myt2-myt1;
     t1=t1/1000;
     Serial.println(myt2);
     v1=0.200/(t1); // 20cm de velocidad
     f1=0;
   }
    if(value3==LOW && f2==1){
     Serial.println("50cm detectados");
     myt3=millis();
     t1=myt3-myt2;
     t1=t1/1000;
     Serial.println(myt3);
     v2=0.200/(t1); // 20cm de velocidad
     f2=0;
     Serial.println(v2);
   }

    if(value4==LOW && f3==1){
     Serial.println("70cm detectados");
     myt4=millis();
     t1=myt4-myt3;
     t1=t1/1000;
     Serial.println(myt4);
     v3=0.200/(t1); // 20cm de velocidad
     f3=0;
     Serial.println(v3);
   }

    if(value5==LOW && f4==1){
     Serial.println("90cm detectados");
     myt5=millis();
     t1=myt5-myt4;
     t1=t1/1000;
     Serial.println(myt5);
     v4=0.200/(t1); // 20cm de velocidad
     f4=0;
     Serial.println(v4);
   }

    if(value6==LOW && f5==1){
     Serial.println("110cm detectados");
     myt6=millis();
     t1=myt6-myt5;
     t1=t1/1000;
     Serial.println(myt6);
     contprom=1;
     v5=0.200/(t1); // 20cm de velocidad
     f5=0;
     Serial.println(v5);
   }
   if(contprom==1)
   {
    cont=1;
    vprom=((v1+v2+v3+v4+v5)/5);
   }
}


void prom()
{
  if(cont==1)
  {
  Serial.println("primer valor");  
  // aqui  vale 1 y se ha presionado una vez 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Vel 1:");
  lcd.setCursor(7,0);
  lcd.print(v1,3);
  lcd.setCursor(12,0);
  lcd.print("m/s");
  delay(2500);

  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Vel 2:");
  lcd.setCursor(7,0);
  lcd.print(v2,3);
  lcd.setCursor(12,0);
  lcd.print("m/s");
  delay(2200);
  

  Serial.println("segundo on"); 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Vel 3:");
  lcd.setCursor(7,0);
  lcd.print(v3,3);
  lcd.setCursor(12,0);
  lcd.print("m/s");
  delay(2200);
 
  
  Serial.println("tres 3 on"); 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Vel 4:");
  lcd.setCursor(7,0);
  lcd.print(v4,3);
  lcd.setCursor(12,0);
  lcd.print("m/s");
  delay(2200);


  Serial.println("cuatro"); 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Vel 5:");
  lcd.setCursor(7,0);
  lcd.print(v5,3);
  lcd.setCursor(12,0);
  lcd.print("m/s");
  delay(2200);


  Serial.println("prom"); 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Vel Prm:"); 
  lcd.setCursor(8,0);
  lcd.print(vprom,3);
  lcd.setCursor(13,0);
  lcd.print("m/s");
  delay(2200);

  }
       
}

Cuando planteas un problema de este tipo debe estar acompañado de un esquema que nos muestre como es el contexto de la medición.
Lee las normas y acompaña siempre tu consulta inicial de la mayor documentación que nos facilite las cosas. No tenemos porque ser detectives de lo que quieres hacer.

Mirando tu código parece ser que tienes 7 sensores.
El animal pasa y va dándote indicaciones al inicio, 30, 70, 90, 110cm. Me faltan sensores pero ese es tu problema.
Luego promedias.
Pequeño error. para que calculas y presentas en cada caso. En algo tán rapido lo mejor es hacer muestreo de los datos y dejar los cálculos para el final.
Bueno y por lo visto todo lo presentas en un LCD. No creo que alcances a ver nada xq como ya dije es rápido.
Imagina un animal a 36km/h = 36x1000/3600= 10 m/seg traduzco 10 metros x segundo.
Vamos a poner la mitad 18km/h o sea 5 m/seg
A 5m/seg o 500 cm/seg tus marcas seran asi
arranque 0 mseg
30 cm 60 mseg
50 cm 120 mseg
70 cm 140 mseg
90 cm 180 mseg
110 cm 220 mseg
Estos tiempos deberían medirse sin roblemas pero al momento de verlos, si estas distraído no ves nada.
Entonces.. los almacenas y presentas luego.
Ahora miro tu código y te hago sugerencias.

Luego esto:

   if(value==HIGH && fo==1)
   {
      lcd.setCursor(3,0);
      lcd.print("LISTO PARA");
      lcd.setCursor(2,1);
      lcd.print("INICIAR TEST");
      delay(1000);
      lcd.clear();
     }

A un animal le vas a decir LISTO PARA INICIAR TEST?? o de nuevo, como no lo has explicado se trata de un perro y lo sueltas para que inicie la prueba.
Digo esto porque tiene un delay 1000 que opaca todo el resto de la medición.
Eso se hace con un pulsador extra que inicia el proceso y deja todo listo.
Tambien tienes una serie de flags de sensor a sensor que condiciona la medición siguiente. Si se te cae un sensor (por caer me refiero a si no mide o detecta) todo lo demás no se ejecuta.

EDITO 1:
Este es el código, contine el bendito delay(1000) del arranque pero hasta que consideres poner un pulsador lo dejo asi.

#include <LiquidCrystal.h>
#include <Wire.h> 
//#include <avr/wdt.h> //libreria del watchdog
//Declarar LCD y pines
LiquidCrystal lcd(7,6,5,4,3,2);
const int sensorPin1 = 13;
const int sensorPin2 = 10;
const int sensorPin3 = 11;
const int sensorPin4 = 9;
const int sensorPin5 = 12;
const int sensorPin6 = 8;

//const int sensorPin = 8;
/*const int sensorPin = 8;
const int sensorPin2 = 12;
const int sensorPin3 = 9;
const int sensorPin4 = 11;
const int sensorPin5 = 10;
const int sensorPin6 = 13;*/

int cont=0;
unsigned long myTime[10];
float vel[10];
float v1,v2,v3,v4,v5,
      vprom,
      myt1=0,myt2=0,myt3=0,myt4=0,myt5=0,myt6=0,
      t1=0;
int f1=1,fo=1,f2=1,f3=1,f4=1,f5=1;

int value1 = 0;
int value2 = 0;
int value3 = 0;
int value4 = 0;
int value5 = 0;
int value6 = 0;
int boton;
int contprom=0;


void setup() {
  Serial.begin(9600);           // iniciar puerto serie
  pinMode(sensorPin1, INPUT);   // definir pin como entrada
  pinMode(sensorPin2 , INPUT);  // definir pin como entrada
  pinMode(sensorPin3 , INPUT);  // definir pin como entrada
  pinMode(sensorPin4 , INPUT);  // definir pin como entrada
  pinMode(sensorPin5 , INPUT);  // definir pin como entrada
  pinMode(sensorPin6 , INPUT);  // definir pin como entrada
 
   //Definir las dimensiones del LCD (16x2)
  lcd.clear(); 
  lcd.begin(16,2);
  lcd.setCursor(3,0);
  lcd.print("LISTO PARA");
  lcd.setCursor(2,1);
  lcd.print("INICIAR TEST");

}
 
void loop(){
  
  value1 = digitalRead(sensorPin1);  //lectura digital de pin
  value2 = digitalRead(sensorPin2);  //lectura digital de pin
  value3 = digitalRead(sensorPin3);
  value4 = digitalRead(sensorPin4);  //lectura digital de pin
  value5 = digitalRead(sensorPin5);  //lectura digital de pin
  value6 = digitalRead(sensorPin6);

  detecta();
} 
 
void detecta()  {
  if (value==HIGH && fo==1)    {
    lcd.setCursor(3,0);
    lcd.print("LISTO PARA");
    lcd.setCursor(2,1);
    lcd.print("INICIAR TEST");
    delay(1000);
  }

  if (value1== LOW && fo==1) {
      Serial.println("Se inicio el test");
      myTime[0]= millis();  //10 cm
      fo=0;
  }
  
  if (value2==LOW && f1==1){
      Serial.println("30cm detectados");
      myTime[1]=millis();
      f1=0;
  }
  if (value3==LOW && f2==1){
      Serial.println("50cm detectados");
      myTime[2]=millis();
      f2=0;
  }

  if (value4==LOW && f3==1){
      Serial.println("70cm detectados");
      myTime[3]=millis();
      f3=0;
  }

  if (value5==LOW && f4==1){
      myTime[4]=millis();
      f4=0;
  }

  if (value6==LOW && f5==1){
      Serial.println("110cm detectados");
      myTime[5]=millis();
      f5=0;
  }
  if (f1==0 && f2==0 && f3==0 && f4==0 && f5=0) { // si se completaron todos los pasos
      vprom = 0;
      for (int i=1; i<6; i++) {
          // velocidad = distancia / tiempo
          // v = 0.2/t pero t = t/1000 => 0.2*1000/t es lo mismo o 200/t
          vel[i] = 200/(myTime[i]-myTime[i-1]); // en metros / seg
          vprom += vel[i];
      }
      vprom /= 5.0;  // valor promedio de velocidades.
      muestroProm();
  }
  
}

void muestroProm()  {
  char buffer[20], buff[6];
  
  for (int i=1; i<6; i++) {
      Serial.println("Valor"+String(i));  
      // aqui  vale 1 y se ha presionado una vez 
      lcd.setCursor(0,0);
      sprintf(buffer, "Vel %d: %s m/s", i);
      lcd.print(buffer);
      Serial.printñln(buffer);
      delay(2500);
  }

  Serial.println("Prom :"); 
  dtostrf(vprom, 6, 3, buff);  //6 incluye todos los digitos mas . decimal.
  sprintf(buffer, "Vel prom %s m/s", buff);
  lcd.print(buffer);
  Serial.println(buffer);
  delay(2200);
}