Parlons Arduino > Modélisation, Architectures logicielles et matérielles
Modélisation logicielle d'un réseau - le système de Jean-Luc
Jean-Luc:
--- Citation de: Dominique le février 26, 2019, 07:25:13 pm ---Au lancement du programme, le moniteur affiche 2 anomalies :
--- Code: ---Direction deja fixee : AIGUILLE_2
Direction deja fixee : AIGUILLE_8
Nombre de voies : 52
--- Fin du code ---
--- Fin de citation ---
Les connexions doivent être faites selon une seule direction une fois celle-ci choisie. Tu pars d'un élément et tu tournes dans une seule direction. Il ne faut pas en changer entre le circuit extérieur et intérieur.
Quand tu écris :
--- Code: --- aiguille4.connecteEntrantAVoie(aiguille2, ENTRANT);
--- Fin du code ---
La direction de aiguille2 est fixée à DIRECTION_AVANT et celle de aiguille4 à DIRECTION_ARRIERE
Ensuite quand tu écris
--- Code: ---aiguille0.connecteSortantDevieAVoie(aiguille2, SORTANT_DEVIE);
--- Fin du code ---
Tu tentes de fixer la direction d'aiguille2 à DIRECTION_ARRIERE
D'où le message d'erreur
Dominique:
Merci Jean-Luc,
Cela a pour conséquence que je ne peux pas décrire les 2 boucles en sens inverse l’une de l’autre, à partir du moment où il y a une liaison entre les deux.
Donc sur une boucle un train circulera en marche avant et sur l’autre boucle un autre train circulera en marche arrière.
Jean-Luc:
L'orientation du graphe de ton réseau n'a rien à voir avec le sens de circulation normal des trains.
Dominique:
Voilà, j'ai repris la description, toujours dans le sens horaire et l'erreur n'apparait plus.
Je joins le programme complet avec une trace qui montre comment le programme explore le réseau, c'est très intéressant ;D
Pour tester il faut entrer au moniteur d'abord le numéro de la voie de départ (ou voie de garage), puis ENTER, puis le numéro de la voie d'arrivée, puis ENTER.
Exemple : On voit bien les retours à l'aiguille précédente pour tester l'autre coté !
--- Code: ---Depart VOIE_GARAGE_11 Arrivee VOIE_GARAGE_15
VOIE_GARAGE_11
AIGUILLE_12
AIGUILLE_10
AIGUILLE_20
AIGUILLE_6
VOIE_1
AIGUILLE_5
AIGUILLE_19
VOIE_GARAGE_10
AIGUILLE_4
AIGUILLE_2
VOIE_2
AIGUILLE_17
VOIE_3
AIGUILLE_13
VOIE_5
VOIE_6
VOIE_7
VOIE_8
VOIE_9
AIGUILLE_8
AIGUILLE_7
VOIE_0
AIGUILLE_4
AIGUILLE_6
VOIE_4
AIGUILLE_16
AIGUILLE_13
AIGUILLE_15
VOIE_27
VOIE_GARAGE_26
AIGUILLE_0
VOIE_25
AIGUILLE_18
VOIE_23
AIGUILLE_14
VOIE_22
VOIE_21
VOIE_20
VOIE_19
VOIE_18
AIGUILLE_11
AIGUILLE_9
VOIE_16
AIGUILLE_1
AIGUILLE_0
VOIE_17
AIGUILLE_3
VOIE_GARAGE_15
--- Fin du code ---
Bon, j'ai 2 ans de retard sur Denis mais je me prépare pour la suite ...
Amicalement
Dominique
DDEFF:
Bravo Dominique !
Je suis content que tu te sois frotté au problème des itinéraires, liés au fait qu'il faut bien décrire le réseau d'une manière ou d'une autre.
La méthode de Jean-Luc est basée sur une remarque "simple" : ce que les modélistes appellent un réseau est pour les mathématiciens un graphe.
Depuis Léonard Euler (1707-1783) et les ponts de Königsberg, on connait la puissance des graphes, avec leurs nœuds et leurs arcs qu'on peut parcourir de différentes façons
De nombreuses recherches (depuis 300 ans !), des bibliothèques pour différents langages : il y a de la matière.
L'autre intérêt de son programme, c'est la gestion très subtile de la place mémoire.
Ce que j'en ai retenu de fondamental, c'est la notion de connecteur, extrêmement puissante.
J'ai (aussi) utilisé cette méthode, avec quelque subtilités supplémentaires :
1°) Je n'ai pas de liste des départs ou des arrivées. On part de n'importe quel signal vers n'importe quel signal.
2°) On peut effacer l'itinéraire en plein milieu (si on s'arrête) et en changer. Et même changer de sens à ce moment.
3°) On peut chaîner les itinéraires automatiquement
Donc, Dominique, tu es sur la bonne voie ;D ;D
PS : j'ai fini ma nouvelle mouture de mon éditeur (1300 lignes en moins) et il reste quelques bugs sur la nouvelle mouture du gestionnaire, avec une loco. Bientôt sur le forum.
PPS : si on m'avait dit un jour que je caserai les ponts de Königsberg sur Locoduino, je ne l'aurais jamais cru. 8)
Navigation
[#] Page suivante
[*] Page précédente
Utiliser la version classique