Esperar un tiempo sin delay()

Hola.

Os planteo la situación a ver si alguno de vosotros sabe ayudarme.

Tengo un método el cual "salta" al detectar una interrupción (la interrupción 0 mediante attachInterrupt() ). Pero he visto que el método delay() no funciona dentro de un método llamado por interrupción.

La pregunta es: ¿Se puede esperar, por ejemplo, 200ms dentro de un método llamado por interrupción? El método millis() tampoco va bien en ese método.

Gracias :wink:

No conozco el entorno de programación de Arduino (uso AVR Studio + WinAVR) pero te respondo por si puede ser lo que pasa.

Cuando se entre en una interrupción en su ISR, se suelen desactivar las interrupciones globales a no ser que se indique lo contrario, por lo que si delay(); requiere de la interrupción de un timer para su funcionamiento (y no habilita las interrupciones globales), ésta no está habilitada.

Si ésto es lo que sucede deberías habilitar las interrupciones globales (bit 7 del registro SREG a 1) antes de realizar el delay.

Sólo doy una idea por si puede ser así, a espera de que alguien que conozca bien ésto te conteste.

Saludos.

Indaltronia...

Yo personalmente lo que hago es guardar el "Tiempo Actual" en una variable, sumarle el delay que se desea esperar y a continuación ir comprovando a que el "Tiempo Actual" sea igual o mayor que la variable antes guardada...

Espero que te sirva...

Un Saludo,

Hola, gracias a los dos por responder. Ya comprendo por qué no funciona el delay(), pero mi nueva duda es saber como variar el valor de un registro del arduino.

Un saludo.