Arduino

HeliOS pour Arduino

HeliOS pour Arduino
Les microcontrôleurs d'un Arduino utilisent un seul programme pour contrôler tous les commutateurs, LED et autres parties du système. Le premier programme appris par un utilisateur Arduino est généralement le programme « Blink », qui utilise la fonction de retard pour allumer et éteindre une LED de manière uniforme. Ce programme simple peut être étendu pour faire beaucoup de choses, mais il ne peut pas inclure le multitâche.

Pour les projets plus avancés, vous devez modifier les valeurs et lire les données en temps réel, ce qui n'est pas possible avec la fonction de délai standard dans Arduino. Par conséquent, une solution différente est nécessaire. Heureusement, HeliOS peut vous aider.

Les limites d'Arduino

Comme mentionné dans l'introduction, le langage standard d'un Arduino peut être appliqué de plusieurs manières. Cependant, il y a un problème: l'Arduino ne peut pas effectuer plusieurs tâches. Par exemple, vous ne pouvez pas régler trois LED différentes pour qu'elles clignotent à des intervalles indépendants. Cette tâche ne peut pas être effectuée car, si vous utilisez le délai, la LED avec le délai le plus long bloquera le clignotement des autres LED en attendant de changer d'état.

L'interrogation standard est également gênante, car la vérification de l'état d'un bouton nécessite une action. Dans un Arduino standard, vous devez configurer une fonction pour interroger l'état d'un commutateur ou de tout autre état.

Bien qu'il existe des solutions pour résoudre ces problèmes (par ex.g., interruptions matérielles, la fonction millis, l'implémentation FreeRTOS), mais ces solutions ont aussi des limites. Pour pallier les problèmes de ces solutions, Mannie Peterson a inventé HeliOS. HeliOS est petit et efficace, et il peut même fonctionner sur des contrôleurs 8 bits.

Considérez le code ci-dessous, qui n'est au mieux pas fiable car l'instruction delay empêchera la vérification du bouton.

int boutonPin = 2; // le numéro de la broche du bouton poussoir
int ledPin = 4; // le numéro de la broche LED
// les variables vont changer :
int buttonState = 0; // variable de lecture de l'état du bouton poussoir
void setup()
// initialise la broche LED en sortie :
pinMode(ledPin, SORTIE);
pinMode(LED_BUILTIN, SORTIE);
// initialise la broche du bouton-poussoir en entrée :
pinMode(boutonPin, INPUT);

boucle vide()
// lit l'état de la valeur du bouton poussoir :
buttonState = digitalRead (boutonPin);
// vérifie si le bouton poussoir est enfoncé. Si c'est le cas, l'état du bouton est ÉLEVÉ :
if (buttonState == HIGH)
digitalWrite (ledPin, HAUT); // allume la LED
autre
digitalWrite(ledPin, LOW); // éteint la LED

digitalWrite(LED_BUILTIN, HAUT); // allume la LED (HIGH est le niveau de tension)
retard(1000); // attend une seconde
digitalWrite(LED_BUILTIN, BAS); // éteint la LED en rendant la tension FAIBLE
retard(1000); // attend une seconde

Lorsque vous exécutez ce code, vous verrez que le 'ledPin' clignotera normalement. Cependant, lorsque vous appuyez sur le bouton, il ne s'allumera pas, ou s'il le fait, il retardera la séquence de clignotement. Pour faire fonctionner ce programme, vous pouvez passer à d'autres méthodes de délai ; cependant, HeliOS offre une alternative.

Linux embarqué sur Arduino (HeliOS)

Malgré le « OS » dans son nom, HeliOS n'est pas un système d'exploitation : c'est une bibliothèque de fonctions multitâches. Cependant, il implémente 21 appels de fonction qui peuvent simplifier les tâches de contrôle complexes. Pour les tâches en temps réel, le système doit gérer les informations externes au fur et à mesure qu'elles sont reçues. Pour ce faire, le système doit être capable d'effectuer plusieurs tâches.

Plusieurs stratégies peuvent être utilisées pour gérer les tâches en temps réel : stratégies événementielles, stratégies équilibrées à l'exécution et stratégies de notification de tâche. Avec HeliOS, vous pouvez utiliser n'importe laquelle de ces stratégies avec des appels de fonction.

Comme FreeRTOS, HeliOS améliore les capacités multitâches des contrôleurs. Cependant, les développeurs qui planifient un projet complexe d'importance critique doivent utiliser FreeRTOS ou quelque chose de similaire, car HeliOS est destiné aux passionnés et aux amateurs qui souhaitent explorer la puissance du multitâche.

Installer HeliOS

Lors de l'utilisation des bibliothèques Arduino, de nouvelles bibliothèques peuvent être installées avec l'IDE. Pour les versions 1.3.5 et plus, vous choisissez d'utiliser le gestionnaire de bibliothèque.


Alternativement, vous pouvez télécharger un fichier zip à partir de la page Web et utiliser ce fichier pour installer HeliOS.


Veuillez noter que vous devez inclure HeliOS dans votre code avant de pouvoir commencer à l'utiliser.

Exemple

Le code ci-dessous peut être utilisé pour faire clignoter une LED une fois par seconde. Bien que nous ayons ajouté du code HeliOS, l'effet final est le même que celui du tutoriel d'introduction.

La principale différence ici est que vous devez créer une tâche. Cette tâche est mise dans un état d'attente et une minuterie est définie pour indiquer à la tâche quand s'exécuter. De plus, la boucle ne contient qu'une seule instruction : xHeliOSLoop(). Cette boucle exécute tout le code défini dans le setup() du code. Lorsque vous planifiez votre code, vous devez définir toutes les broches, constantes et fonctions dans le paramètre supérieur.

#inclure
//Utilisé pour stocker l'état de la LED
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Définir une tâche de clignotement
void taskBlink(xTaskId id_)
if (ledState)
digitalWrite(LED_BUILTIN, BAS);
ledState = 0;
autre
digitalWrite(LED_BUILTIN, HAUT);
ledState = 1;



// Définir une tâche de lecture de bouton
void buttonRead(xTaskId id_)
buttonState = digitalRead (boutonPin);
// vérifie si le bouton poussoir est enfoncé. Si c'est le cas, l'état du bouton est ÉLEVÉ :
if (buttonState == HIGH)
// allume la LED :
digitalWrite (ledPin, HAUT);
autre
// éteint la LED :
digitalWrite(ledPin, LOW);


void setup()
// l'identifiant garde une trace des tâches
xTaskId id = 0 ;
// Ceci initialise les structures de données Helios
xHeliOSSetup();
pinMode(LED_BUILTIN, SORTIE);
pinMode(ledPin, SORTIE);
// initialise la broche du bouton-poussoir en entrée :
pinMode(boutonPin, INPUT);
// Ajouter puis faire attendre taskBlink
id = xTaskAdd("TASKBLINK", &taskBlink);
xTaskWait(id);
// Intervalle de minuterie pour 'id'
xTaskSetTimer(id, 1000000);
id = xTaskAdd("BUTTON", &buttonRead);
xTaskStart(id);

boucle vide()
// Ceci, et seulement cela, est toujours dans la boucle lors de l'utilisation d'Helios
xHeliosLoop();

Avec ce code, vous pouvez programmer la LED pour qu'elle clignote à tout moment sans avoir à vous soucier du retard de l'Arduino.

Conclusion

Ce projet est idéal pour les nouveaux utilisateurs d'Arduino, car il vous permet d'utiliser le code Arduino standard pour gérer des tâches en temps réel. Cependant, la méthode décrite dans cet article est réservée aux amateurs et aux chercheurs. Pour des projets plus sérieux, d'autres méthodes sont nécessaires.

5 meilleurs jeux d'arcade pour Linux
De nos jours, les ordinateurs sont des machines sérieuses utilisées pour les jeux. Si vous ne pouvez pas obtenir le nouveau score élevé, vous saurez c...
Bataille pour Wesnoth 1.13.6 Développement publié
Bataille pour Wesnoth 1.13.6 publiée le mois dernier, est la sixième version de développement de la 1.13.x series et il apporte un certain nombre d'am...
Comment installer League Of Legends sur Ubuntu 14.04
Si vous êtes fan de League of Legends, alors c'est l'occasion pour vous de tester League of Legends. Notez que LOL est pris en charge sur PlayOnLinux ...