Читать книгу Aprender Arduino, prototipado y programación avanzada con 100 ejercicios - Rubén Beiroa Mosquera - Страница 20
011 Interrupciones por tiempo Parpadeo de un led
ОглавлениеEn cuanto a la gestión de tiempo, ya hemos trabajo con las instrucciones delay, delayMicroseconds, millis y micros.
Las interrupciones por tiempo vienen a sustituir a un delay o a un delayMicrosenconds; como ya es sabido, estas instrucciones lo que hacen es detener la ejecución de un programa durante un tiempo determinado: hasta ahora era la única forma que teníamos de ejecutar tareas temporales.
El inconveniente de esta solución es que no se puede ejecutar otra tarea y, para muchas aplicaciones, será necesario la ejecución de tareas temporales pero también atender a otras tareas; pues bien, con las interrupciones temporales, conseguimos esto mismo.
Al igual que ocurría con las interrupciones por señal, tenemos una función que se va a ejecutar sin ser llamada desde otra línea del programa y que, en este caso, lo hará cada cierto tiempo. El <<mecanismo>> que utiliza este tipo de interrupciones son los Timers; estos mecanismos son capaces de llevar el contaje de tiempo y podemos trabajar con ellos gracias a las diferentes librerías de las que disponemos.
Cada Arduino tiene un determinado número de Timers; en concreto, el Arduino UNO tiene tres Timers. En este capítulo haremos un caso práctico utilizando el Timer 1 así que vayamos al gestor de librerías e instalemos la librería correspondiente :
•La instrucción <<Timer1.attachInterrupt()>> define la función que se tiene que ejecutar.
•Con la instrucción <<Timer1.initialize()>>, definimos cada cuánto tiempo se ejecuta la función del punto anterior. El tiempo se mide en microsegundos.
•Con estas instrucciones ya podemos hacer, por ejemplo, que un led parpadee cada segundo sin necesidad de bloquear el programa .
Otras instrucciones de la librería TimerOne:
•<<Timer1.setPeriod(microseconds)>> establece un nuevo tiempo de interrupción.
•<<Timer1.start()>> arranca la interrupción con el nuevo tiempo.
•<<Timer1.stop()>> detiene la temporización.
•<<Timer1.restart()>> reinicia el temporizador.
•<<Timer1.pwm(pin, duty)>> configura las PWM asociadas a este Timer.
•<<Timer1.setPwmDuty(pin, duty)>> establece un nuevo tiempo para las señales PWM.
•<<Timer1.disablePwm(pin)>> deshabilita la PWM.
•<<Timer1.detachInterrupt()>> deshabilita la interrupción.
No para todos los Timers tenemos las mismas instrucciones, ya que usamos diferentes librerías para trabajar con ellos y también existen diferencias entre ellos.
Con un buen uso de este tipo de interrupciones, conseguiremos mejorar el rendimiento de nuestros programas.