Multitarea Arduino

El uso de la función delay es muy desaconsejable usarla, puesto que el tiempo que estamos ejecutando esta función se para el microcontrolador y no es capaz de hacer nada más. Es mucho mejor usar funciones de temporización que cuenten el tiempo y ejecutar la operación cuando el temporizador se dispare, permitiendo a Arduino hacer varias tareas a la vez. Las librerías de temporizadores como MStimer2 y timer nos pueden ayudar a hacer estas funciones.

Existen librerías que permiten simular la multitarea utilizando el concepto de Thread o hilo, como por ejemplo la librería ArduinoThread y mThread. Por supuesto que no se trata de unos hilos reales (en el sentido de que funcionan como “procesos” separados), sino que lo simulan, facilitando el uso de ese paradigma de programación multitarea.

En el curso avanzado se profundizará en el uso de estas librerías multitarea

Enlace interesante sobre multitarea: http://correntino.net/wp/?p=11

Ejercicio: Hacer el ejercicio de blink pero sin usar la función delay(). Para ello se puede usar las funciones millis() o micros().

Ejemplo de ejercicio: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Después de entender el ejercicio, añadir un botón y a la vez que el LED parpadea, contar cuantas veces se pulsa el botón y mostrarlo por el puerto serie cada 3 segundos las pulsaciones. Comprobar la multitarea.

Hacer el mismo ejercicio con las librerías mstimer2 y la librería Timer, de forma con una de ellas temporizo cada 5 segundos el parpadeo del LED y con la otra se muestra cada 3 segundos el número de pulsaciones contadas.

Librerías:

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio19-BlinkSinDelay

Millis()

Tutorial de uso de millis(): https://www.baldengineer.com/millis-tutorial.html

Blink sin delay explicación paso a paso: https://www.baldengineer.com/blink-without-delay-explained.html

La función millis() me devuelve el número de milisegundos desde que Arduino se ha reseteado, dado que millis devuelve un unsigned long puede tener un valor de hasta 4.294.967.295 que son 49 días, 17 horas, 2 minutos, 47 segundos y 292 milisegundos, por lo tanto al cabo de ese periodo el contador se resetea.

En principio no se debe resetear puesto que corremos el riesgo de que dejen de funcionar las librerías que usen la función millis() sino que hay que usar la diferencia de millis entre un evento y otro. Más información: https://www.baldengineer.com/arduino-how-do-you-reset-millis.html

Manejar el rollover de millis(): http://pastebin.com/vYYtZAbb

EXTRA – Programación Arduino

Muchos más ejemplos y prácticas para hacer: http://arduino.cc/en/Tutorial/HomePage

Más código:

Ver este ejemplo de programa y fijarse en la estructura: https://github.com/jecrespo/Home_Power_Meter/blob/master/Home_Power_Meter.ino

Anuncios

Un pensamiento en “Multitarea Arduino

  1. Pingback: Día 5. Programación Arduino II – Aprendiendo Arduino

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s