Cronometro control de tiempo

Hola queria saber como hacer un cronometro corrido. Por ejemplo lo que quiero hacer es que un led este prendido y cuando este prendido el tiempo corra.. cuando este led se apague a traves de un sensor IR quiero que me guarde el tiempo y el cronometro siga hasta que el led se apague de nuevo. Tambien me gustaria que estos datos sean exportados a un txt o excel. Aqui adjunto el codigo que tengo y lo que me sale en el monitor serial.

const int analogInPin = A1; // Pin analogico 1 para la lectura del Fototransistor
const int OutPin = 13;      // Pin para el led indicador

int sensorValue = 0;        // Inicializamos el valor del sensor
unsigned long start, finished, elapsed;

void setup() {
  // Inicializamos la comunicacion serial a 9600 bps:
  Serial.begin(9600); 
  pinMode(OutPin, OUTPUT);
  
}
void displayResult()
{
  float h,m,s,ms;
  unsigned long over;
  elapsed=finished-start;
  h=int(elapsed/3600000);
  over=elapsed%3600000;
  m=int(over/60000);
  over=over%60000;
  s=int(over/1000);
  ms=over%1000;
  Serial.print("Raw elapsed time: ");
  Serial.println(elapsed);
  Serial.print("Elapsed time: ");
  Serial.print(h,0);
  Serial.print("h ");
  Serial.print(m,0);
  Serial.print("m ");
  Serial.print(s,0);
  Serial.print("s ");
  Serial.print(ms,0);
  Serial.println("ms");
  Serial.println();
}

void loop() {
  // leemos el pin para y asignamos el valor a la variable.
  sensorValue = analogRead(analogInPin);            
  
  // Si el valor obtenido es mayor a 900 se activa el LED
  if(sensorValue < 300)
  {
    digitalWrite(OutPin, HIGH);
  }
  else
  {
    digitalWrite(OutPin, LOW);
  }

  // Imprimimos el valor en el monitor.
  Serial.print("sensor = " );                       
  Serial.println(sensorValue);     

  if (digitalRead(13)==LOW)
  {
    start=millis();
    Serial.println("Started...");
    
  }
  if (digitalRead(13)==HIGH)
  {
    finished=millis();
    displayResult();
  }  
  delay(100);                     
}

Monitor Serial:

sensor = 242
Raw elapsed time: 9775
Elapsed time: 0h 0m 9s 775ms

sensor = 298
Raw elapsed time: 9880
Elapsed time: 0h 0m 9s 880ms

sensor = 377
Started...
sensor = 416
Started...
sensor = 425
Started...

Espero sugerencias!

Bueno ese programa lo conseguiste por algun sitio en la Web ya que si lo hubieras hecho tu, las preguntas serían diferentes.
La primer crítica constructiva es como detecta el IR.
Esta usando un pin Analogíco. Para mi criterio esta mal. Agregas un delay de la conversión que no sirve.
Ya que quieres medir tiempos, yo usaría aquí si una INTERRUPCION que tome el instante y lo latchee (guarde en memoria).
Antes de continuar, dinos cuantos datos debe almacenar el sistema o será asi por mucho tiempo?

Como siempre no has expicado para que es, me huele a un cronómetro de autos de slot por los tiempos parciales indicados. Porque es importante, porque entonces no habra mas de 100 datos por dar un tope de memorias a reservar.

surbyte:
Porque es importante, porque entonces no habra mas de 100 datos por dar un tope de memorias a reservar.

Problemas de memoria? Una forma de solventar ese problema, es guardar los datos en un archivo de texto, en una tarjeta SD. El tiempo que tardaría para registrar un parcial, sería de menos de medio milisegundo.

yo usaría aquí si una INTERRUPCION que tome el instante y lo latchee (guarde en memoria).

Durante un ISR se podrá interactuar con una tarjeta SD?

Durante una ISR sí se puede guardar en memoria (no toma más que unos pocos ciclos), pero guardar en una tarjeta SD puede llevar bastante más, por lo que no sería recomendable hacerlo desde la interrupción, sino guardar los datos en una FIFO y traspasarlos a SD fuera de la interrupción.
De todas formas desde el 2-5-2016 sólo estamos elucubrando.