medir el tiempo

Hola a todos, tengo un problema que no soy capaz de solucionar, os cuento.
Tengo un led que se enciende dos segundos se apaga un segundo y se vuelve a encender, así sucesivamente.
Por otro lado tengo un pulsador y asociado a este una interrupción que lo que hace es apagarme el led en cuanto pulse.
Lo que quiero saber es como medir el tiempo que he tardado en apagar el led desde que lo e visto encenderse, esto es, veo que se enciende el led, aprieto el pulsador y se apaga el led antes de que pasen los dos segundos, como saber el tiempo que he tardado en apagarlo.

Muchas gracias a todos.

podrías usar una variable auxiliar que se incremente mientras la condición de pulsar se cumpla...
Algo así:

float tTranscurrido = 0.0;
int pinPulsador = A0;

while(pinPulsador != 1){
     tTranscurrido+=0.1;
}

Serial.print("Tiempo transcurrido: ");
Serial.println(tTranscurrido);

Saludos...

Esta misma respuesta la puedes encontrar en infinidad de preguntas que se han realizado en este foro:

Utiliza millis. Para ver cómo funciona, echa un vistazo al ejemplo BlinkWithoutDelay del IDE.

Noter, no me vale millis(), porque esta función no sirve para utilizarla dentro de una interrupción.
El ejemplo que me dices, si no me confundo, es para mantener encendido el led durante un segundo, yo no quiero eso, lo que quiero es saber desde que se enciende hasta que se apaga por la interrupción cuanto tiempo ha pasado.

pulseIn(pin, value, timeout)

no sirve esa funcion?

rajocan:
Noter, no me vale millis(), porque esta función no sirve para utilizarla dentro de una interrupción.
El ejemplo que me dices, si no me confundo, es para mantener encendido el led durante un segundo, yo no quiero eso, lo que quiero es saber desde que se enciende hasta que se apaga por la interrupción cuanto tiempo ha pasado.

Es que no hace falta ni interrupción para eso. Con algo así valdría (está sin probar).

const int LEDPIN=8;
const int PUSHBUTTON=9;
unsigned long TIEMPOENCENDIDO=2000;
void setup()
{
	Serial.begin(9600);
}
void loop()
{
	unsigned long tiempoInicio=millis();
	unsigned long tiempoTranscurrido;
	digitalWrite(LEDPIN, HIGH);
	do {
		tiempoTranscurrido=millis()-tiempoInicio;
		if (digitalRead(PUSHBUTTON)) break;
	} while(tiempoTranscurrido<TIEMPOENCENDIDO);
	digitalWrite(LEDPIN, LOW);
	if(tiempoTranscurrido<TIEMPOENCENDIDO) {
		Serial.print("Pulsado botón tras ");
		Serial.print(tiempoTranscurrido);
		Serial.println(" milisegundos");
	} else {
		Serial.println("Transcurrieron los dos segundos sin pulsar.");
	}
	delay(500);
}

De que sirve una interrupción si no sabes como medir los tiempos?
La manera mas directa de medir tiempos es con millis() o Micros(). Si quieres ser mas preciso debes usar timers.
Pero ver el tiempo de respuesta a tu reacción es como mínimo una tarea de colegio/instituto, me puedo equivocar pero casi siempre lo ha sido.

Algo que puede resolverse moderadamente bien con millis() y sin interrupciones.
Se prende el led, inicias una variable con el valor de millis() y esperas que presiones el pulsador, tomas ese tiempo y restas y asunto terminado.

Ya te lo ha resuelto @noter con gran calidad.

Gracias a todos por las respuestas, especialmente a noter, siguiendo su programa he podido darle un giro a mi programa y solucionar los problemas, me han servido de mucho tus ideas.

Gracias.