Étape 2: Mise en œuvre de la FSM manuellement sur un arduino
Quand on veut implémenter ce comportement sur l’Arduino, le code peut ressembler à cette substance. Le code n’est rien de trop spécial, il suffit de l’instruction switch-case contient une case pour chaque état possible et vérifie l’intérieur là si les conditions de transition sont remplies. Dans l’affirmative, l’État est modifié.
Comme vous pouvez le voir, le code est assez simple. Mais pouvez-vous imaginer ce qui se passe quand vous n’avez pas 2, mais 10 ou 100 États ? Ce n’est pas rare pour un FSM du monde réel. Le code obtient illisible et peut atteindre des longueurs de plusieurs mille lignes. En outre, normalement, nous voulons plan le FSM de manière graphique, parce que nous devons être en mesure de voir ce qu’il fait réellement aussi vite que possible. Ensuite, nous devons toujours la machine de l’état actuel du code, et nous devons être sûrs que notre conception graphique et notre code manuscrite en fait fassent la même chose. Cela peut être un énorme problème.
Pensez-y : pour chaque État a notre FSM, notre code a besoin d’une instruction « case », et pour chaque transition vers d’autres États, nous avons besoin d’une si ou une instruction case là-dedans. Si nous aurions une machine d’État où chaque État peut atteindre tous les autres États (cas le plus extrême), notre code grandirait avec carré de n, où n est le nombre d’États. Ainsi, nous aurions 3 cas pour 3 États, avec 3 ifs à l’intérieur, donc la longueur du code serait proportionnelle à 9. Lorsque nous avons 10 États, ce qui n’est pas beaucoup plus, la longueur du code serait proportionnelle à 100, et avec 20 Etats, le code est déjà quatre fois plus long. Une représentation graphique de ce FSM serait plus facile à saisir, et ce serait bien si nous n’aurions pas à gérer toutes ces déclarations de cas de commutateur. Si vous êtes familier avec les cartes qui décrivent les schémas pour les simulateurs – nous ne voudrais pas de concevoir des schémas avec cartes, soit. Alors, que faisons-nous au lieu de cela ? Voir dans la prochaine étape !