Otra manera de poder simular multitarea con mBot es utilizar un puntero de programa para poder marcar la evolución de subprogramas dentro de un mismo programa.
Este tipo de control nos va a permitir controlar el avance de «pasos» del programa por el bucle principal de manera que funciona como un contador.
Si somos capaces de definir las diferentes rutinas según lo que tengan que hacer dependiendo del puntero seremos capaces de trabajar con diferentes tareas al mismo tiempo.
La ventaja sobre el uso del timer de Arduino es que vamos a poder parar el avance de pasos cuando queramos dependiendo de condiciones concretas como veremos en el ejemplo.
Recuerda a lo largo de todo el curso que tienes disponible el formulario de soporte para alumnos para plantear tus dudas y preguntas.
Vídeo de la sesión 2 del curso de programación avanzada por bloques con mBot.
Tal y como has podido ver también es posible combinar ambas técnicas vigilando el timer de Arduino a la vez que utilizamos un puntero de programa para saber en qué punto de la subrutina estamos pudiendo ser detenida cuando queramos aunque el timer siga funcionando.
Ejercicios:
Vamos a repetir los ejercicios de la sesión anterior pero combinando el timer con un puntero de programa:
- Programa mBot en modo siguelíneas para que pueda avanzar mientras alterna alguna secuencia de luces.
- Modifica el programa para que pueda recibir órdenes del mando de manera que podamos acelerar o frenar la velocidad del robot en modo siguelíneas y que varíe proporcionalmente la velocidad de parpadeo de las luces.
- Amplía el programa permitiendo salir del modo siguelíneas mediante el mando y entrar en un modo control remoto manteniendo la secuencia de luces. Se debe poder volver al modo siguelíneas con el mando si lo hemos llevado previamente por control remoto hasta la línea. Te puedes apoyar en la selección de programas de la lección 11 del anterior curso con mBot.
Todas las clases de este curso
- Programación avanzada por bloques con mBot #1. Multitarea con timer.
- Programación avanzada por bloques con mBot #2. Multitarea con puntero de programa.
- Programación avanzada por bloques con mBot #3. Adaptar rango entradas analógicas.
- Programación avanzada por bloques con mBot #4. Argumentos de funciones o bloques.
- Programación avanzada por bloques con mBot #5 Comunicación serie.
- Programación avanzada por bloques con mBot #6. Música, avanzado.
- Programación avanzada por bloques con mBot #7. Evitar el uso de esperas.
- Programación avanzada por bloques con mBot #8. Lecturas de sensores fiables.