Auteur Sujet: Machine à états  (Lu 6580 fois)

petitrain

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : Machine à états
« Réponse #15 le: décembre 20, 2015, 12:09:45 am »
Ce n'est qu'une bibliothèque de plus pour l'Arduino. On peut très bien combiner les méthodes de la "library" avec le langage Arduino ou du C/C++.
Dans les dernières pages du guide de l'utilisateur, il explique comment écrire le code après avoir fait son grafcet sur papier avec quelques exemples.On part de l'état initial, puis on code  chaque état et chaque transition,on vérouille l'état précédant, après on s'occupe des sorties et des variables pour chaque état.  Je trouvais que de cette manière, c'était plus intuitif. La gestion de millis() est assez délicate a manier (pour des apprentis programmeurs), là, on débroussaille le problème.

nopxor

  • Jr. Member
  • **
  • Messages: 64
    • Voir le profil
Re : Machine à états
« Réponse #16 le: avril 10, 2018, 06:37:53 pm »
Bonjour,

Pour illustrer concrètement l'emploi des machines à états sur Arduino, il y a un excellent tutoriel là:
https://forum.arduino.cc/index.php?topic=470879.0

Marc-Henri

  • Full Member
  • ***
  • Messages: 123
    • Voir le profil
    • Modélisme ferroviaire & électronique
Re : Machine à états
« Réponse #17 le: avril 29, 2019, 12:25:51 pm »
Bonjour à tous,

Depuis nos derniers échanges au sujet des machines d'états, j'ai avancé, mais sans utiliser l'outil Yakindu Statechart Tool. J'ai réalisé 2 projets Arduino incluant des machines d'états C++.

Gare cachée sur ligne en voie unique
Ce projet a été réalisé pour le réseau d'un ami. La détection des trains se fait par des ILS.
  • Voie: 2 instances.
  • GareCachée: 1 instance.
  • Bouton: 2 instances.
  • Led: 3 instances une pour la led 13 et 2 pour les leds du TCO.

Gestion de mon 2ème réseau en N
Ce 2ème projet, encore en cours, comprend plusieurs machines d'états implantées dans des classes C++.
  • Zone de détection: 8 instances.
  • Boutons: 1 instance de cette classe pour gérer les 7 boutons du TCO connectés à une entrée analogique.
  • Led: 1 instance, pour faire clignoter la led 13 de la carte et indiquer ainsi visuellement que le programme n'est pas planté.
  • Mode: 1 instance de cette classe pour lire le mode de fonctionnement via un contacteur rotatif connecté à une entrée analogique.
  • Aiguilles: 1 instance pour gérer les 5 aiguilles du réseau. Cette classe est responsable du séquencement des commandes des aiguilles afin d'assurer qu'une seule est active à la fois.
  • GareCachée: 1 instance de cette classe inclut 4 instances de zones pour détecter les trains.
  • Affichage: 1 instance de cette classe pour gérer l'affichage LCD pour afficher l'état de la gare cachée et donner d'autres informations à l'utilisateur.
  • Signal: 2 instances de cette classe pour gérer les signaux en sortie de gare.
  • VoieDeGare: 2 instances de cette classe qui incluent 1 instance de zone.
  • Itineraire: 8 instances.
  • ChefDeGare: 1 instance de cette classe qui assure la coordination du tout.

Il y a donc plus d'une vingtaine de machines d'états qui interagissent entre elles. Les classes sous jacentes restent suffisamment simples pour pouvoir être codées directement sans passer par un outil supplémentaire. L'architecture se base sur l'approche décrite ici: https://paulmurraycbr.github.io/ArduinoTheOOWay.html et mentionnée dans mon post: http://forum.locoduino.org/index.php?topic=576.0.

Je posterai plus de détails ultérieurement.

Bon début de semaine et meilleures salutations.

Marc-Henri
« Modifié: avril 29, 2019, 12:32:30 pm par Marc-Henri »