Duda proyecto cronografo

Hola
Lo primero deciros que se muy poco de arduino.
Estoy intentando hacer un cronografo con arduino (adjunto el codigo) y la foto de la plantilla en la que me he basado.
Con respecto a la plantilla R1 y R2 son de 240 y las R3 y R4 son de 1K
Los led son de 3mm tanto emisor como receptor (he probado tambien con led de 5mm)
El tema es que lo unico que me da siempre es valor 0, no se si es que hay algun error en el codigo o simplemente que asi no puede funcionar.
Por favor, podeis ayudarme?

esquema cronografo.jpg

 unsigned int data = 0;

 volatile unsigned long int time1 = 0;
 volatile unsigned long int time2 = 0;

 void setup()
 {
     Serial.begin(9600);

     attachInterrupt(0, sensor_1, FALLING);
     attachInterrupt(1, sensor_2, FALLING);
 }

 void loop()
 {
     while ( time1 == 0 && time2 == 0 ) ;
     delay(800);

     if ( time1 != 0 && time2 != 0 && time2 > time1 )
     {
         data = 0.06 / ((time2 - time1) / 1000000.0);  // v = s / t
     }
     else
     {
         data = 0;
     }

     Serial.println(data);

     time1 = 0;
     time2 = 0;
 }

 void sensor_1()
 {
     if ( time1 == 0 )
     {
         time1 = micros();
     }
 }

 void sensor_2()
 {
     if ( time2 == 0 )
     {
         time2 = micros();
     }
 }

esquema cronografo.jpg

Para comenzar veo varios errores.

data no puede ser unsigned int, debiera ser float de acuerdo a como haces las operaciones.

Mas allá que te he corregido el código cabe la posibilidad de que tengas rebotes y eso empañe la medición.
Prueba a ver

float data = 0;

volatile unsigned long int time1 = 0;
volatile unsigned long int dif   = 0;
volatile bool flag = false, presento = false;

void setup() {
    Serial.begin(9600);

    attachInterrupt(0, sensor_1, FALLING);
    attachInterrupt(1, sensor_2, FALLING);
}

void loop() {
 
    if (presento) {
        data = 0.06 / ( dif/ 1000000.0);  // v = s / t
        presento = false;
        flag = false;
        Serial.println(data);
    }
}

void sensor_1() {
    time1 = micros();
    flag = true;
}

void sensor_2() {
    if (flag) {
        dif = micros() - time1;
        presento = true;
    }
}

Cuando el auto pasa el primer sensor se toma el tiempo en time1.
Se activa un flag que dice.. pasó un auto.
Cuando supera los 6 cm de la pista, y con flag en True entonces calcula la diferencia en micros
y activo un flag llamado presento.
En tu loop no se muestra nada si no tienes presento en True y con eso evitas molestas informaciones en el Monitor Serie.
Luego de los cálculos pongo los flag listos para contar otro momento.

Atento con los rebotes.

Muchas gracias
He realizado las modificaciones correspondientes y ya funciona cuando paso la mano.
Lo que si que me ha parecido notar es que cuando pasa muy rápido no lo ve... pero supongo que eso será por los led...
He probado después con un tsop34838 simplemente a que cuando pase encienda un led 5 segundos y con la mano funciona pero si lo hago rápido tampoco lo pilla.
Por cierto y perdonar ya que después de contestarme me di cuenta que no había explicado lo que tenía que medir... y pensaste que era algún coche... y era un balín de airsoft.
Un saludo

Bueno, un balín de airsoft que atraviesa una distancia de 6 cm en algunos microsegundos.

La pregunta esta, cual es la velocidad esperable?
Empieza definiendo que esperas medir.. cuantos cm/seg?

Hola
Lo primero muchas gracias por tu ayuda.
Al final he desistido con los infrarrojos porque no se porque no veía los objetos que pasaban rápido... ni siquiera lo llegue a probar con los balines por eso mismo. Después hice una prueba con un puntero láser y una foto resistencia... y decir que así si que observe una diferencia en los valores que pude observar en la pantalla (tengo pedidos varios emisores láser que me llegan viernes o sábado), decir que no lo pude probar mucho porque el puntero no iba muy bien... pero lo poco que pude ok.
Con respecto a tu pregunta:
La velocidad esperada es de unos 350 fps o en metros... unos 107 m/sg

Adjunto el boceto que he utilizado con el laser... pero como no estaba seguro si funcionaria me limite a probar si habia alguna diferencia en las lecturas al pasar la bola.
Lo malo de este sistema es que como hay lectura cada muy poco tiempo una vez que he disparado cuesta mucho encontrar la diferencia sino lo paras rapido pero bueno, cuando tenga los laser nuevos vere si funciona.

int RESISTENCIA = A0;
int entrada = 0 ;

 void setup(){
    Serial.begin(9600);
}

 void loop () {
  entrada = analogRead (RESISTENCIA);
  Serial.println (entrada);
     
}

Bueno, no puedes perder tiempo con la conversión de un AD (algo como 100uSeg).
Pasaste de usar interrupciones a usar algo muy lento. Vas por mal camino.

Te pregunté la velocidad para determinar el tiempo de lectura entre los dos sensores.

107 m/seg

velocidad = distancia/tiempo => v = d/t => 107 m/seg = 0.06 m/tiempo => Tiempo t = 0.06/107 seg = 560 useg

Te das cuenta?

Lo que debes hacer es mejorar la respuesta de los sensores o mejor dicho de los receptores.
Cuando pasa rápido el cambio es tan abrupto que dudo que alcance niveles que generes el disparo correcto de las interrupciones.
Podrías usar Schmitt Trigger tipo LM339 para mejorar el estado de los pulsos.
Sería cuestión de probar.