Arduino

HeliOS para Arduino

HeliOS para Arduino
Los microcontroladores de un Arduino usan un solo programa para controlar todos los interruptores, LED y otras partes del sistema. El primer programa aprendido por un usuario de Arduino es típicamente el programa 'Blink', que usa la función de retardo para encender y apagar un LED en un patrón uniforme. Este sencillo programa se puede ampliar para hacer muchas cosas, pero no puede incluir multitarea.

Para proyectos más avanzados, necesita cambiar valores y leer datos en tiempo real, lo que no es posible con la función de retardo estándar en Arduino. Por lo tanto, se necesita una solución diferente. Afortunadamente, HeliOS puede ayudar.

Las limitaciones de Arduino

Como se mencionó en la introducción, el lenguaje estándar de un Arduino se puede aplicar de muchas maneras. Sin embargo, hay un problema: el Arduino no puede realizar múltiples tareas. Por ejemplo, no puede configurar tres LED diferentes para que parpadeen a intervalos independientes. Esta tarea no se puede llevar a cabo porque, si utiliza la demora, el LED con la demora más larga bloqueará el parpadeo de los otros LED mientras espera para cambiar de estado.

El sondeo estándar también es problemático, ya que para verificar el estado de un botón es necesario realizar una acción. En un Arduino estándar, debe configurar una función para sondear el estado de un interruptor o cualquier otro estado.

Si bien existen soluciones para abordar estos problemas (p.gramo., interrupciones de hardware, la función millis, la implementación de FreeRTOS), pero estas soluciones también tienen limitaciones. Para superar los problemas de estas soluciones, Mannie Peterson inventó HeliOS. HeliOS es pequeño y eficiente, e incluso puede ejecutarse en controladores de 8 bits.

Considere el código a continuación, que en el mejor de los casos no es confiable porque la declaración de retraso evitará que se verifique el botón.

int buttonPin = 2; // el número del pin del pulsador
int ledPin = 4; // el número del pin LED
// las variables cambiarán:
int buttonState = 0; // variable para leer el estado de los pulsadores
configuración vacía ()
// inicializa el pin LED como salida:
pinMode (ledPin, SALIDA);
pinMode (LED_BUILTIN, SALIDA);
// inicializa el pin del pulsador como entrada:
pinMode (buttonPin, INPUT);

bucle vacío ()
// lee el estado del valor del botón pulsador:
buttonState = digitalRead (buttonPin);
// comprobar si el pulsador está pulsado. Si es así, el buttonState es HIGH:
if (buttonState == HIGH)
digitalWrite (ledPin, ALTO); // enciende el LED
demás
digitalWrite (ledPin, BAJO); // apaga el LED

escritura digital (LED_BUILTIN, ALTA); // enciende el LED (ALTO es el nivel de voltaje)
retraso (1000); // Espera un segundo
digitalWrite (LED_BUILTIN, BAJO); // apaga el LED haciendo que el voltaje sea BAJO
retraso (1000); // Espera un segundo

Cuando ejecute este código, verá que el 'ledPin' parpadeará normalmente. Sin embargo, cuando presiona el botón, no se iluminará o, si lo hace, retrasará la secuencia de parpadeo. Para que este programa funcione, puede cambiar a otros métodos de retardo; sin embargo, HeliOS proporciona una alternativa.

Linux integrado en Arduino (HeliOS)

A pesar del "SO" en su nombre, HeliOS no es un sistema operativo: es una biblioteca de funciones multitarea. Sin embargo, implementa 21 llamadas a funciones que pueden simplificar las tareas de control complejas. Para tareas en tiempo real, el sistema debe manejar la información externa a medida que se recibe. Para hacerlo, el sistema debe poder realizar múltiples tareas.

Se pueden usar varias estrategias para manejar tareas en tiempo real: estrategias impulsadas por eventos, estrategias equilibradas en tiempo de ejecución y estrategias de notificación de tareas. Con HeliOS, puede emplear cualquiera de estas estrategias con llamadas a funciones.

Al igual que FreeRTOS, HeliOS mejora las capacidades multitarea de los controladores. Sin embargo, los desarrolladores que están planeando un proyecto complejo de importancia crítica deben usar FreeRTOS o algo similar porque HeliOS está diseñado para ser utilizado por entusiastas y aficionados que quieran explorar el poder de la multitarea.

Instalación de HeliOS

Al usar las bibliotecas de Arduino, se pueden instalar nuevas bibliotecas con el IDE. Para las versiones 1.3.5 y superior, elige usar el Administrador de bibliotecas.


Alternativamente, puede descargar un archivo zip de la página web y usar ese archivo para instalar HeliOS.


Tenga en cuenta que debe incluir HeliOS en su código antes de poder comenzar a usarlo.

Ejemplo

El siguiente código se puede utilizar para hacer que un LED parpadee una vez por segundo. Aunque hemos agregado código HeliOS, el efecto final es el mismo que el del tutorial introductorio.

La principal diferencia aquí es que debes crear una tarea. Esta tarea se coloca en un estado de espera y se configura un temporizador para indicarle a la tarea cuándo debe ejecutarse. Además, el ciclo contiene solo una declaración: xHeliOSLoop (). Este bucle ejecuta todo el código definido en la configuración () del código. Cuando planifica su código, debe configurar todos los pines, constantes y funciones en la configuración superior.

#incluir
// Usado para almacenar el estado del LED
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definir una tarea de parpadeo
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, BAJO);
ledState = 0;
demás
escritura digital (LED_BUILTIN, ALTA);
ledState = 1;



// Definir una tarea de lectura de botones
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// comprobar si el pulsador está pulsado. Si es así, el buttonState es HIGH:
if (buttonState == HIGH)
// enciende el LED:
digitalWrite (ledPin, ALTO);
demás
// apaga el LED:
digitalWrite (ledPin, BAJO);


configuración vacía ()
// id realiza un seguimiento de las tareas
xTaskId id = 0;
// Esto inicializa las estructuras de datos de Helios
xHeliOSSetup ();
pinMode (LED_BUILTIN, SALIDA);
pinMode (ledPin, SALIDA);
// inicializa el pin del pulsador como entrada:
pinMode (buttonPin, INPUT);
// Agregar y luego hacer esperar taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Intervalo de temporizador para 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("BOTÓN", & buttonRead);
xTaskStart (id);

bucle vacío ()
// Esto, y solo esto, siempre está en el ciclo cuando se usa Helios
xHeliosLoop ();

Con este código, puede programar el LED para que parpadee en cualquier momento sin tener que preocuparse por el retraso del Arduino.

Conclusión

Este proyecto es ideal para personas que son nuevas en Arduino, ya que le permite usar el código Arduino normal para manejar tareas en tiempo real. Sin embargo, el método descrito en este artículo es solo para aficionados e investigadores. Para proyectos más serios, se necesitan otros métodos.

Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....