Bonjour à Toutes et tous,
le plan (non définitif !) de mon réseau. Écrit avec et d'après le totorial de Pierre Lecouffe sur LOCODUINO, "TCO en processing"
En cours la signalisation, toutes les procédures pour lier processing et Arduino
Bonjour à Toutes et tous,
le plan (non définitif !) de mon réseau. Écrit avec et d'après le totorial de Pierre Lecouffe sur LOCODUINO, "TCO en processing"
En cours la signalisation, toutes les procédures pour lier processing et Arduino
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Salut Jacques
Superbe! Peux-tu me fournir le fichier, ça m'intéresse.
Gères-tu tout ton réseau avec ça ou as-tu encore besoin de mon programme!
Faut-il adapter mon programme?
Faut-il adapter le programme Processing?
A+
Bonne journée (il flotte)
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
Le voilà en zip : PERSO_10_2_1.7z
Il y a la solution : tout Arduino ce qui rend nécessaire la construction du TCOGères-tu tout ton réseau avec ça ou as-tu encore besoin de mon programme !
Faut-il adapter mon programme?
Faut-il adapter le programme Processing?
Il y a la solution : le TCO sur ordinateur qui va commander les Mega 2560 ; donc pas de TCO à fabriquer et ça c'est un gros avantage
il y a la solution : adapter le programme, je pense que c'est la même chose ... C'est faisable ?
et la dernière solution : tout en processing mais là, tu m'as dit que tu ne le connaissais pas trop !
J'ai demandé à Pierre LECOUFFE sur LOCODUINO, s'il comptait compléter son tuto,, j'attends la réponse.
Au besoin tu peux récupérer sur Locoduino, les tutos "TCO en processing"
Sur le TCO, il y a encore pas mal de travail à faire, la signalisation (cantons, zones d'arrêt, présignalisation etc.) je m'y attelle demain matin
Ici aussi .... il flotte !
A+
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Pour info,
sur le plan, j'ai numéroter les lignes et alphabétiser les colonnes !
C'est hach'ment plus pratique pour s'y retrouver !
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Bonjour Jacques
C'est, pour moi, la meilleure solution, c'est quand même plus fun un TCO sur ordi, quel que soit la méthode, Processing ou autre.
Pour l'adaptation, je connais, un peu, le principe de fonctionnement de Processing, je pense que c'est possible, lors d'un clic sur un objet, d'envoyer, sur la liaison USB de l'Arduino.
C'est là que tu peux mettre les ordres tels que je les ai défini comme AIG=A1_G ou BP=C2_V1 etc.
Si les ordres sont déjà constitués dans Processing, il doit être possible d'adapter mon programme.
Je vais étudier Processing.
De toute façon, je continue de développer la version avec bus i2C pour les E/S, je m'amuse trop!
A+
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
Bonsoir JP,
voilà un extrait du message de P. Lecouffe :
Tout à fait OK pour une adaptation ! si ça ne te poses pas de soucis !Quand on clique sur un pavé-aiguille, celle ci change de position (c'est aussi vrai pour les signaux), il faut donc en plus envoyer un message à l'Aduino.
Pour communiquer entre Processing et Arduino le plus simple est le câble USB/Série (celui qui sert à charger les programmes).
Il faut ensuite définir un protocole pour les messages échangés (taille, contenu, ...), en pratique cela peut être 1, 2, ou 3 octets. La taille du message dépends du nombre de messages différents (et aussi du nombre d'appareils commandés, par exemple le nombre d'aiguiles). Il faut avoir une petite idée d'avance sur les messages échangés : commandes d'aiguilles, de signaux, trains,... mais aussi ceux de rétrosignalisation.
Concernant le dessin du TCO : on peut faire tourner les pavé-signaux (comme les autres), il existe aussi des des grands quart de cercle ( PaveArc90Grand(n) ). Je me pose aussi des questions sur les deux croisements, est ce bien des croisement, par ce qu'il existe des pavés TJD et TJS contenant deux aiguilles et un croisement.
A+ Il flotte toujours !!!
Être vieux, c'est être jeune depuis plus longtemps que les autres !
bonjour
j'ai jeté un oeil rapide au code Java / Processing.
En prenant une approche objet, Il suffirait d'ajouter une variable d'instance et une méthode à la classe Pavé qui permettrait d'associer le message qui doit être envoyé sur le port USB lors d'un clic sur ce pavé. Cette notification serait émise dans la méthode manoeuvrer() qui est appelée dès qu'un pavé est modifié (manoeuvre des aiguilles et signaux).
En prenant une autre approche, on pourrait créer un "centre de notification" qui aurait la connaissance des associations entre "changement d'état d'un pavé" et "message à émettre". Le centre de notification serait "notifié" lors d'un click sur un pavé et c'est ce centre de notification qui envoie le bon message
Enfin on pourrait coder "en dur" dans la fonction mouseClicked() l'émission du message sur le port série après modification du pavé par l'appel à manoeuvrer() puisqu'on sait de quel pavé il s'agit
la première approche serait sans doute la plus "propre".
Salut Jay M
J'ai aussi fais quelques essais et j'arrive à transmettre, depuis Processing, dans mon programme. Tout ce joue dans void mouseClicked().
Le repère est le pavé (c, l), où que l'on y clique cela produit un mouvement gauche, droite, gauche, droite...
Mon problème, je n'arrive pas à saisir si c'est un mouvement gauche ou droite qui se produit. Certainement mon manque de connaissances de ce programme.
Si tu as un truc!
Mon idée est de créer, dans mon programme, un tableau pavesLC dans lequel j'introduirais l'aiguille correspondante, selon la notation habituelle.
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
Bonjour Messieurs,
je vois que vous vous intéressez à Processing.
Il me semble que c'est la bonne solution pour ne pas avoir à fabriquer manuellement un TCO complet.
cette solution proposée par Jay devra être associée aussi au click sur un bouton (à developper ! c'est en cours !) afin de pouvoir répondre à C1_V1, C2_V1 ou C3_V1 etc ... il y a 8 circuits prévu pour la gare et encore plus pour le triage.En prenant une approche objet, Il suffirait d'ajouter une variable d'instance et une méthode à la classe Pavé qui permettrait d'associer le message qui doit être envoyé sur le port USB lors d'un clic sur ce pavé. Cette notification serait émise dans la méthode manoeuvrer() qui est appelée dès qu'un pavé est modifié (manoeuvre des aiguilles et signaux).
Qu'en pensez-vous ?
et comme dans le feuilleton à la tv ..... "Sous le soleil" pour cet après-midi !
Cordialement, Jacques
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Salut Jacques
Dessines tes boutons, fais-moi parvenir le Processing et je l'adapterais à mon programme.
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
oui j'ai déjà pas mal joué avec par le passé pour piloter des appareils photo. ça permet de déporter de nombreuses choses sur une machine plus puissante et laisser le "pilotage" matériel à l'arduino tout en ayant une GUI sympa et bien sûr on a la puissance d'un vrai ordinateur complet !
C'est pour cela que je dis que le mieux ce n'est pas de le faire dans la fonction mouseClicked() car bien qu'on ait les coordonnées du pavé cliqué on ne connait pas son état et vers quoi il va basculer. ça obligerait à maintenir une nouvelle fois les états. Par contre l'instance du Pavé connait très bien son état puisqu'elle sait se dessiner et donc ma recommendation serait d'envoyer le message depuis la méthode manoeuvrer() qui est appelée dès qu'un pavé est modifié (manoeuvre des aiguilles et signaux).Le repère est le pavé (c, l), où que l'on y clique cela produit un mouvement gauche, droite, gauche, droite...
Mon problème, je n'arrive pas à saisir si c'est un mouvement gauche ou droite qui se produit. Certainement mon manque de connaissances de ce programme.
Si tu as un truc!
un bouton ne serait qu'un pavé comme un autre avec un dessin un peu différent. donc gérable avec la même approche, il enverrait un message différentcette solution proposée par Jay devra être associée aussi au click sur un bouton (à developper ! c'est en cours !) afin de pouvoir répondre à C1_V1, C2_V1 ou C3_V1 etc ... il y a 8 circuits prévu pour la gare et encore plus pour le triage.
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Bonjour Jacques
Uns piste, pour tes boutons, charges la bibliothèque controlP5, il y a des exemples.
Bonne soirée.
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
pas prévu dans le code d'origine.
en faisant sans fioritures pour rester dans l'esprit du code
dans l'onglet Paves, rajoutez à la fin du fichier une sous classe qui crée un pavé utilisant un dessin de cerclela méthode dessiner() ne fait que peindre un cercle d'une certaine couleur elle est appelée automatiquement si on a créé dans le TCO un pavé de ce type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class PaveCercle extends Pave { float cx=5, cy=5, r=5; int couleur=#0000FF; // BLEU PaveCercle() { } // constructeur void dessiner() { fill(couleur); pushMatrix(); scale(1.0/ZOOM); circle(cx*ZOOM, cy*ZOOM, r*ZOOM); popMatrix(); } Pave manoeuvrer(boolean b) { if (couleur == #0000FF) couleur = #FF00FF; else couleur = #0000FF; return this; } }
Quand on clique sur ce pavé, la méthode manoeuvrer() est appelée automatiquement et dans cette méthode j'alterne juste la couleur du rond entre BLEU (#0000FF) et Magenta (#FF00FF)
Une fois ceci fait il ne vous reste plus qu'à déclarer dans le TCO que certains pavés continennent un PaveCercle, par exemple au début au lieu de sauter deux lignes, faites:et vous verrez en lançant l'application que vous avez maintenant un cercle bleu dans la première case en haut à gauche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void construire() { // PERSO 10 complet //============================================================================== ajouter(new PaveCercle()); alaligne(); // Ligne 2 alaligne(); // Voie 3 en haut ; Ligne 3 espacer(1); ...
et si vous clickez dans cette case le cercle alterne de couleur
@JP:
de la même manière que proposé ci dessous, il suffirait que cette méthode manoeuvrer() envoie sur le port série un message, vous voyez qu'elle connait la couleur courante et donc a tout ce qu'il faut pour envoyer un message d'activation ou de désactivation.
Bonsoir Jay,
merci pour le bouton !
Là, je vais avancer vraiment !
Dès que j'ai terminé, je mettrai un fichier .zip
Je m'y attelle dès demain !
Pas de jours chômés/fériés pour nous retraités !
voici les dernières modifs du TCO
J'aurais aimé avoir votre connaissance de ces langages, C++, Java et Processing.
Je vous envie !
Bonne soirée. Jacques
Être vieux, c'est être jeune depuis plus longtemps que les autres !
cool
Pour progresser rien ne vaut la pratique et essayer de faire des bouts de codes mais en cherchant à comprendre ce que l’on fait. En Java il faut comprendre quand même la notion de programmation orientée objet et donc lire des trucs à ce sujet (c’est aussi important en C++) et bien sûr regarder quelles sont les primitives du langage ainsi que sa grammaire.
si vous regardez dans votre code il existe déjà un Pavé de type texte, donc il suffit de l’instancier pour voir ce que ça donne. Je suis sur mobile maintenant donc je ne peux plus testerje vais devoir inclure aussi du texte à des endroits bien précis.
Bonjour Jay,
Les expériences conduisent parfois à des erreurs, dont celle-ci :
"Unknown error inside the compiler" !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 class PaveCercle extends Pave { float cx=4, cy=4, r=6 ; int couleur=#0000FF ; // BLEU String nom; // nom sur le bouton /// AJOUTER PAR Jacques PaveCercle() {} // constructeur void dessiner() { fill(couleur); pushMatrix(); scale(1.0/ZOOM); circle(cx*ZOOM, cy*ZOOM, r*ZOOM); popMatrix(); textSize(4*N); /// AJOUTER PAR Jacques textAlign(CENTER,CENTER); textMode(SHAPE); /// AJOUTER PAR Jacques text(nom,B+(x*9+4.5F)*N,B+(y*9+4.5F)*N); /// AJOUTER par Jacques } /// AJOUTER par Jacques /* String nom() { return nom; } // obtention nom du bouton void couleur(int c,boolean x) { couleur=c; cli=x; } // coloration fond de bouton int no() { return no; } // obtention numero du bouton boolean cli() { return cli; } //=========================== */ Pave manoeuvrer(boolean b) { if (couleur == #0000FF) couleur = #FF00FF; else couleur = #0000FF; return this; }
J'ai omis quoi ? j'ai surtout de gros progrès à faire !!!
Ça demande une correction par un maître !
Avec mes remerciements, Jacques
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Votre code utilise Nqui n'est pas défini (ni B ni F d'ailleurs). il faudrait aussi modifier le constructeur pour qu'il accepte un texte en paramètre et le range dans votre String.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 textSize(4*N); /// AJOUTER PAR Jacques textAlign(CENTER,CENTER); textMode(SHAPE); /// AJOUTER PAR Jacques text(nom,B+(x*9+4.5F)*N,B+(y*9+4.5F)*N); /// AJOUTER par Jacques
Pourquoi vous vous embêtez à embarquer le texte dans le bouton alors qu'il existe un pavé texte. Si vous conservez la classe PaveCercle comme je l'avais définie et vous modifiez le TCO pour rajouter des pavés de texte
alors vous aurez directement à l'écran 3 "boutons" suivis par leur texte respectif. Je suppose que c'est cela que vous souhaitez faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void construire() { // PERSO 10 complet //============================================================================== ajouter(new PaveCercle()); ajouter(new PaveTexte("C1 V1", 4, NOIR, 2, 0)); // texte, taille texte, couleur, ∆x, ∆y espacer(2); ajouter(new PaveCercle()); ajouter(new PaveTexte("C2 V1", 4, NOIR, 2, 0)); // texte, taille texte, couleur, ∆x, ∆y espacer(2); ajouter(new PaveCercle()); ajouter(new PaveTexte("C3 V1", 4, NOIR, 2, 0)); // texte, taille texte, couleur, ∆x, ∆y alaligne(); // Ligne 2 ...
si vous voulez que ce soit "plus dense" et que le texte tienne dans un seul pavé, il faut réduire la taille de la police et mettre un passage à la ligne dans le texte. Par exemple en mettant des pavés comme celaau début de la fonction construire(), vous aurez alors cette représentation (en mettant la taille de police à 2 ça sera plus compact dans le pavé mais plus difficile à lire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ajouter(new PaveCercle()); ajouter(new PaveTexte("C1\nV1", 3, NOIR, 0, 0)); // texte, taille texte, couleur, ∆x, ∆y espacer(1); ajouter(new PaveCercle()); ajouter(new PaveTexte("C2\nV1", 3, NOIR, 0, 0)); // texte, taille texte, couleur, ∆x, ∆y espacer(1); ajouter(new PaveCercle()); ajouter(new PaveTexte("C3\nV1", 3, NOIR, 0, 0)); // texte, taille texte, couleur, ∆x, ∆y
Bonjour à vous
J'ai fait des essais dans Processing, ça ne doit pas être pour moi! Je ne suis pas arrivé à "cerner" l'événement d'un clic sur une aiguille (ça c'est bon) tout en déduisant quel est la direction active.
Pour la transmission vers l'Arduino, c'est ok.
Je vais me concentrer sur le programme de l'Arduino et vous me transmettrez les commandes issues de Processing et je les traiterai dans l'Arduino.
Jacques, une remarque concernant les boutons supplémentaires, toutes action sur ces boutons doit "passer" via Processus afin de mettre à jour l'affichage et, ensuite être envoyés à l'Arduino, par le même "chemin" qu'un click sur un pavé. Autrement il faudrait prévoir une procedure de feedback de l'Arduino afin d'aligner les informations des deux (Processing et Arduino)
Je te fais une version Processing du programme, avec des MCP23017 pour gérer les ports des aiguilles. Faut-il quand même prévoir des ports en entrée pour d'éventuels boutons poussoirs?
Dis-moi quelle configuration de l'Arduino tu veux.
Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!
Salut JP,
alors, même le dimanche ? et sous le soleil ?
J'ai pu modifier le fichier PERSO.pde
J'ai inclus un TCO pour la gare et un TCO pour le triage
il faut que je mette en place les boutons nécessaires pour passer de l'un à l'autre sur les 3 TCOs et avec les conseils de Jay, ça ne devrait pas poser de problème.
Il me faut, à moi débutant très inexpérimenté, le temps pour écrire et surtout comprendre ce que j'écris.
Je t'enverrai le fichier complet dès que ...
te souhaite une bonne journée !
Cordialement, Jacques
Être vieux, c'est être jeune depuis plus longtemps que les autres !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager