Grand nouveauté sur Locoduino : un programme qui écrit … un programme Arduino !Dès le début, j'ai bien aimé ce programme de Jean-Luc.
D'abord, il s'intéressait à une gare que je connaissais bien : la mienne …
Ensuite, comme expliqué, ce programme trouve tous les itinéraires, sans autre préalable que de décrire le réseau dans le .ino.
C'est-à-dire qu'il cherche tout seul tous les itinéraires possibles : on n'a pas besoin de les décrire un par un. Tant mieux, il y en a 241 !
Cependant, cette description du grill de la gare, bien que d'une grande logique, n'est pas aussi simple qu'on le penserait de prime abord.
Aussi, je me suis dit que j'allais la faire écrire par l'ordi, sans intervenir directement.
Je commence par du très simple : mettre tout ce qui concerne le réseau dans le même onglet.Donc, je crée un onglet "Specifs" (sans accent).
Je mets dedans :
enum { … }
La création des objets (voies, aiguilles, TJD, …)
La table des sources
La table des destinations
Le void afficheNomVoie { … }
Jusque là, ce sont de simples copier-coller. On démarre cool.
Je mets tout au début du .ino un #include "Specifs.h" pour que l'Arduino s'y retrouve.
Pour les connexions des voie, cette fois dans le setup(), il faut créer un void()
Je crée donc void export_setup() { … } dans Specifs, que j'appelle depuis le setup().
Un dernier copier coller des connexions de voies et c'est fini.
Une vérification pour voir qu'on n'a rien oublié ni raté une ligne et le programme fonctionne comme avant. C'était bien la peine…
Mais, avez-vous remarqué que pour créer l'onglet dans l'IDE de l'Arduino, il ne vous a pas demandé le nom de l'onglet, mais le nom du fichier correspondant. Et c'est là qu'est la première astuce : tout ce que je dois créer, c'est un simple fichier texte : Specifs.h !
Si je veux changer de réseau, j'ai juste à changer de Specifs.h. C'est dur de faire plus simple.
Reste un "détail" : générer ce fichier…C'est là que j'utilise mon programme de TCO en Processing.
En deux mots :
1°) Je dessine mon réseau, en positionnant des petits cubes.
2°) Je regroupe les cubes en cantons en leur affectant un numéro (de 101 à 255) et je numérote de la même façon les aiguilles (de 1 à 100). J'utilise la touche CTRL et la touche M (pour "memorize").
3°) Une petite analyse, pour voir s'il reste des erreurs (cubes isolés, …) et mise en forme des cantons.
Un simple appui sur A (pour "analysis"). Corrections des erreurs trouvées.
4°) Je sélectionne les voies entrantes de la gare, avec CTRL et quand je les ai toutes, j'appuie sur I (pour "in")
5°) Je sélectionne les voies sortantes de la gare, avec CTRL et quand je les ai toutes, j'appuie sur O (pour "out")
6°) J'appuie sur R (pour "Route", faux ami pour itinéraire).
Et c'est fini.
J'ai, non seulement un TCO sur mesure à l'écran, mais aussi un fichier Specifs.h !
L'affichage du TCO serait presque accessoire (alors que c'est quand même l'essentiel)…
Maintenant, je copie ce fichier Specifs.h pour remplacer celui existant dans la directory du programme Arduino. Et ça marche.
Quelques précisions :
1°) Le programme de Jean-Luc utilise des "voies libres", c'est-à-dire des voies qui sont bien reliées côté gare et "en l'air" vers l'extérieur.
Je n'ai pas retenu cette notion qui n'existe pas dans la réalité, mais dont je comprends parfaitement l'utilité dans ce programme, dans son état actuel.
Les curieux auront remarqué que j'ai donc mis des voies de garage à chaque entrée sortie. Pas très réaliste non plus…
C'est donc un point à creuser dans l'avenir.
2°) J'ai donc un peu modifié le programme de Jean-Luc en retirant les tests de debug au départ (qui font allusion aux voies libres). Mais qui ne sont pas nécessaires au fonctionnement.
3°) Evidemment, j'ai essayé avec le réseau de Dominique que j'utilise dans mes articles.
Le fichier Specifs.h est bien créé, mais il ne fonctionne pas avec l'Arduino.
Est-ce parce qu'il est bouclé ?? Je ne sais pas.
4°) J'ai aussi changé le mot "aiguillage" que j'ai remplacé par "aiguille" (on n'est pas pinailleur pour rien
). Je vais essayer d'ajouter les TJS et les triples, mais c'est plus sournois qu'il y paraît.
Et maintenant ?"Que vais-je faire ?", disait Becaud.
Moi, rien.
Mais j'aimerais bien que Jean-Luc puisse trouver un peu de temps libre pour continuer son magnifique programme.
Parce qu'en l'état actuel, il trouve en un temps record tous les itinéraires d'une gare (et, j'en suis sûr, d'un réseau complet). Mais d'un point A à un point B, il en trouve "trop". Lequel choisir ?
Donc, à suivre.
En PJ : mon TCO en Processing, version 3.8 et le fichier de Jean-Luc avec les quelques modifs décrites et qui marche avec mon Specifs.h