multitâche sous Arduino

On est en week-end, il est donc hors de question que je ne fasse pas un peu d’électronique… Alors je me suis mis en tête de travailler sur le multitâche, pour que mes élèves, les meilleurs, ceux qui s’ennuient car ils ont torché l’ensemble des consignes en une poignée de semaines, puissent voir une programmation plus pro’. De la vraie programmation, quoi.

Bon, est-ce possible sous Arduino de faire du multitâche ? Mais oui, bien sûr !

OK, comment fait-on ?

C’est simple… heu… non, c’est presque simple, dirait feu notre ami Aisberg. Un nouveau titre de livre ? « Le multitâche en C, mais c’est très simple ! » Ah non, j’ai dit presque ! « Le multitâche en C, c’est presque simple ! »

La première chose à voir, c’est la notion de machine à états finis. On pourrait citer Mealy et Moore [histoire de faire genre] et démontrer une belle analyse bien théorique [histoire de perdre un peu de temps], mais on va plutôt voir comment programmer efficacement en utilisant la notion d’états. Une fois que cela sera acquis, le passage au multitâche ne demandera que très peu d’efforts. Si, si, vraiment.

La programmation par machine à états

La théorie est très simple, mais elle est radicalement différente de la programmation standard. Et ça, c’est très perturbant. Si par exemple, on veut faire clignoter une LED à 1 Hz, et que la fréquence du clignotement doivent doubler, lors de l’appui sur un bouton-poussoir, comment ferait la grande majorité des personnes ?

Parenthèses :
J’entends, au fond de la salle, que mon exemple est bien nul. Ah oui mais il faut bien commencer par un truc. Si vous pensez vraiment que cet exemple est nase, je vous propose de réaliser le programme suivant :
« Faire clignoter une LED rouge à 1 Hz, et faire en sorte que la fréquence du clignotement double lors de l’appui sur un BP. En même temps, faire clignoter une LED verte à 0,625 Hz, et faire en sorte que la fréquence du clignotement double lors de l’appui sur un second BP. Les deux LED doivent réagir de façon strictement indépendante, uniquement en fonction de l’état du BP qui leur est assigné. L’ensemble, bien sûr est géré par un unique Arduino. »
Fin de parenthèses.

Le plus facile, le plus rapide, est de suivre le canevas suivant :

  1. initialiser
  2. allumer la LED
  3. attendre 0,5s ou 0,25s selon l’état du bouton-poussoir
  4. éteindre la LED
  5. attendre 0,5s ou 0,25s selon l’état du bouton-poussoir
  6. reprendre à l’étape 2

Oui, c’est vrai, j’aurai dû faire un algorigramme… mais je ne suis pas sur mon ordinateur, avec tous mes logiciels, tout ça.

Bon, ça nous prendrait combien de lignes, ce programme ? Une poignée.

Maintenant, la logique de la machine à états va nous faire réfléchir différemment, en passant toujours par 3 étapes :

  1. lecture des entrées
  2. gestion des états
  3. gestion des actions internes et externes

La lecture des entrées, c’est facile, on se contente de lire nos capteurs, nos BP ; nos entrées, quoi.
La gestion des actions internes et externes permet de commander les actionneurs, de modifier des variables internes, de compter, de calculer, etc.
La gestion des états détermine l’état dans lequel doit se trouver le programme, en fonction de l’état antérieur (l’état précédent), mais aussi en fonction des entrées (capteurs, BP, etc.) et des paramètres internes (variables, compteurs, résultats de calculs, etc.)

Il nous faut donc voir ce que représentent ces états. Vous avez un peu de temps ? Pas moi. Donc, revenez plus tard. En attendant la suite du post, réfléchissez, pour notre LED, à tous les états qu’elle peut prendre, et à toutes les transitions nécessaires au passage d’un état à l’autre. Un indice ? Il n’y a pas 2 états mais 4 ! Argh !

La suite bientôt…

 

 
prof.maquaire ~ 23062018
document sous licence Creative Commons BY-NC-SA
juin 23, 2018

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *