CRONOGRAFO

Hola,

De vistazo rápido:

  • Las variables que se modifican dentro de una interrupción tienen que estar declaradas como volatile (volatile (computer programming) - Wikipedia).
  • Las rutinas que se ejecutan dentro, tienes que intentar que sean lo más pequeñas posibles.
  • Podrías usar las dos entradas de interrupción que tiene Arduino (tiene pinta que lo intentaste asi por la linea comentada). Lo digo, porque digitalRead es lento.
  • Si esperas tiempos pequeños, puedes usar micros() para tener más precisión.
  • Yo cambiaría que velocidad=(float)distancia/(float)tiempo;
  • El Serial.println("celula 2"); antes de recoger el tiempo, te está metiendo mucho retraso, ya que se queda esperando hasta que termina de mandar dicha cadena a 9600 bps (8 +2 (CR+LF) bytes a 960 bytes/s). Sólo esa linea antes de recoger tiempo, te mete un error considerable....

Saludos

Igor R.