Messages récents

Pages: [1] 2 3 ... 10
1
Bibliothèques / Re : bibliothèque DcDccNanoController
« Dernier message par bagou91 le octobre 15, 2017, 05:42:27 pm »
Bonjour,

J'essaye d'ajouter des Accessoires de commandes pour contrôler par exemple des aiguilles, et leds situées sur un autre Arduino Nano qui sera en réception d'ordre DCC.

DcDccNanoController est-il compatible avec l'ajout d'accessoires dans son fonctionnement ?
Au niveau code, pour commencer, j'ai ajouté:
ButtonsCommanderPush aiguille1;

dans le setup:
  Accessories::begin();
  aiguille1.begin(DCCINT(20, 0),13);  //pin digital 13
  aiguille1.AddEvent(DCCINT(20, 1));

dans la loop:
  Accessories::RaiseEvent(eventId, (ACCESSORIES_EVENT_TYPE) Commanders::GetLastEventType(),Commanders::GetLastEventData());
  Accessories::loop();

A la 1ère compilation j'ai eu des erreurs: DCCINT non reconnu.
J'ai dû décommenter #define NO_DCCCOMMANDER ligne 131 du fichier Commanders.h

La compilation m'indique ensuite que le sketch est trop gros (31250octets) pour l'arduino Nano. Que puis-je retirer (si possible) ?

Sinon, puis-je utiliser un autre Arduino Nano pour la partie commande d'accessoires et le brancher en parallèle sur ma voie ?
Si oui que dois-je ajouter pour injecter le signal sur la voie ?

Merci pour votre aide
2
Bibliothèques / bibliothèque DcDccNanoController
« Dernier message par bagou91 le octobre 14, 2017, 12:14:08 pm »
Bonjour,

Je continue ma discussion ici autour de la bibliothèque DcDccNanoController...

Citer
Les occurrences de #define DDC_DEBUG_MODE ne sont là que pour mes tests. J’ai juste oublié de les enlever, et ce sera fait pour la prochaine version. Le seul vraiment nécessaire est dans DcDccNanoController.h .
Je ne vois pas trop la confusion possible… J’ai deux interrupteurs qui s’appellent buttonF0 et buttonF1, et par défaut ils activent respectivement la fonction 0 et la fonction 1. Il est possible de changer buttonF0 pour lui faire activer une autre fonction entre 0 et 28. C’est le nom buttonF0/buttonF1 qui dérange ?

Sur un message précédent tu me confirmais que les interrupteurs F0 F1 étaient associé vers une CV du décodeur.
Mais en fait non, ils sont plutôt associé vers les fonctions du décodeur.

Comme je suis totalement débutant sur le numérique DCC, je ne comprenais plus très bien  ??? :-\
Maintenant c'est bon, je comprend mieux.

Donc l'allumage des feux fonctionnent bien en fonction du sens de marche quand on configure correctement F0=0  :)

Il reste un bug que je constate:
La lecture/écriture des valeurs sur les CV.
Quand je lis la CV0033, cela me retourne 3. Mais d'après ma doc du Lenz 10231-02, la valeur par défaut est 1
Si j'essaye d'écrire CV0033 = 1, quand je relis la CV, il me retourne à nouveau 3.
A chaque lecture et écriture, on entend bien la loco réagir par un petit bruit.


Je tiens quand même à te féliciter pour ton travail !
J'ai essayé de comprendre le fonctionnement des classes et méthodes de la bibliothèque: c'est très bien fait :)
Je vais tenter d'ajouter du code pour commander des accessoires avec la librairie Accessories sur un autre Arduino Nano.
3
Dans ce programme, je teste à la fois ce que fera le programme TCO (celui qui reste sur l'ordi, qu'on ne fait qu'une fois) et le programme Commandes (celui qui sera sur le PCDuino).
Dans le programme TCO, on verra toujours la grille et dans Commandes on ne verra jamais la grille.
A terme, il n'y aura donc pas de touche "g".
Donc, ici, s'agissant d'un programme pédagogique, il faut appuyer sur "g" avant d'appuyer sur "i" pour faire disparaître la grille.

Pour les curieux, il y a une touche "g" pour afficher/masquer la grille et une touche "G" (en majuscule) qui donne, en plus de la grille, les coordonnées colonne et ligne de chaque pavé. Pour moi, développeur, ça a un intérêt, mais sinon, ça ne sert absolument à rien. ;)

Autre remarque, qui a pu choquer :
 
Je fais figurer le nombre d'itérations pour chaque étape du programme. Avec même obligation de cliquer pour continuer ! >:( C'est vraiment inutile, à part dans un programme pédagogique.
Pire : ça finit inexorablement par "Revenu au départ sans rien trouver" !! :o

Pourquoi ?

Si j'affiche le nombre d'itérations, il va les indiquer au fur et à mesure.
Quand il a trouvé le premier itinéraire, il affiche ce nombre, pour ce premier itinéraire.
Puis il remet le compteur à 0 et repart d'où il est (c'est à dire de la fin du premier itinéraire) et recule dans l'arborescence.
Puis il bute sur un appareil de voie et repart en marche avant, avec une autre position de l'appareil de voie jusqu'à ce qu'il trouve le deuxième itinéraire en arrivant à destination. Il affiche le nouveau nombre d'itérations.

Et, forcément, il arrive un moment où il a trouvé tous les itinéraires.
A cet instant, il est "retourné au départ sans rien trouver", sous entendu "comme nouvel itinéraire".

J'ai le même message pour le cas où le programme ne trouve vraiment rien et dans le cas où il ne trouve pas d'autre itinéraire.
Je pourrais facilement distinguer les deux cas, avec un "if" de plus, mais, de toutes façons, ces messages disparaîtront.

Avez vous trouvé l'itinéraire qui affiche 172 itérations ? ::)

J'ai en tête de nombreuses optimisations. Je trouve en effet ce programme efficace, mais trop lent à mon goût.
Particulièrement dans la recherche du connecteur mitoyen où je balaye tous les pavés. En mettant un paramètre supplémentaire dans les formes, je vais tout de suite tomber dessus, en 2 tests seulement.
De même, ce n'est pas la peine de redessiner un pavé s'il n'a pas changé.
Et d'autres choses qui me permettrons de simplifier grandement la gestion des signaux.

A suivre
4
Bus DCC / Re : Märklin Mobile Station 2
« Dernier message par Benoit92 le octobre 12, 2017, 11:40:10 pm »
Merci Dominique et Thierry,
La fonction "Ack" permet au décodeur de la locomotive de renvoyer un signal (pulse) calibré de 60mA pendant 6ms.
Cette impulsion est récupéré par le centrale de contrôle sur la voie de programmation.
Mais, bon si cela n'est pas nécessaire sur la Märklin Mobile 2, je ne vais pas me fatiguer la-dessus.

Traduction depuis l'allemand :
OpenDecoder V2 a la possibilité de renvoyer un signal à la centrale. Il peut s'agir d'une impulsion d'acquittement conforme DCC, d'une impulsion sur une ligne de retour séparée ou d'un arrêt d'urgence, signalé par une ligne distincte.

https://www.opendcc.de/elektronik/HW2/opendecoder2_hw_sch.html

5
Vos projets / Re : Re : 2D2 Echelle 1/32
« Dernier message par msport le octobre 12, 2017, 11:09:23 pm »
Nota : je cherche un équivalent américain en 2NXXXX du transistor BC860 (référence européenne)
Bonjour,
La spécification du BC860 serait general purpose PNP 50 V, hfe 250 , 200 mA
on peut penser au 2N5087 qui correspond mais le courant est limité à 100mA, est-ce un problème ?
6
Vos projets / Re : 2D2 Echelle 1/32
« Dernier message par Dominique le octobre 12, 2017, 08:17:39 pm »
On trouve des sons de loco en cherchant sur YouTube et autres réseaux de vidéo.
Je ne sais pas si tu trouveras une 2D2  ???

Après récupération de la vidéo, je récupère le son avec Audacity qui te permet ensuite de le mettre au format voulu.

J'ai décrit dans ce Forum une carte son avec un mini et un lecteur SD.

http://forum.locoduino.org/index.php?topic=157.0
7
Bus DCC / Re : Märklin Mobile Station 2
« Dernier message par Dominique le octobre 12, 2017, 08:08:53 pm »
Ma MS2 fonctionne aussi très bien avec toutes sortes de décodeurs.

Je ne vois pas très bien ce qu'est ce "ACK". Il y a des instruction de programmation qui attendent un retour ( surtout sur la voie de programmation) d'autres pas (sur la voie principale).

J'ai réalisé un programmateur de CVs et d'adresses (plusieurs CVs pour les adresses longues ) en suivant la doc NMRA : je vais la décrire bientôt.

Dominique
8
Bus DCC / Re : Märklin Mobile Station 2
« Dernier message par Benoit92 le octobre 12, 2017, 10:36:11 am »
Il parait que certaines centrales, lors de la programmation CV du décodeur, ont besoin d'un acknolegment (Ack) pour envoyer les data des CV.
9
Bonjour,

Nouvelle page pour mon programme : il est maintenant capable de gérer les itinéraires ! ;D ;D ;D



Je vais cependant vous décevoir d'emblée car j'en suis "seulement" au stade de les trouver tous et de les dessiner. Aucun ordre n'est envoyé au réseau.
De même, je ne tiens pas compte (pour l'instant) des itinéraires existants ni des occupations. Mais, à côté des problèmes de trouver tous les itinéraires, c'est assez "simple"...

Je remercie particulièrement Pierre59 pour m'avoir appris à programmer avec les objets (j'ai encore des progrès à faire, bien sûr), pour son Locodrome(voir les articles http://www.locoduino.org/ecrire/?exec=article&id_article=154 et suivants) et aussi Jean-Luc pour avoir bien analysé la problématique dans son fil (http://forum.locoduino.org/index.php?topic=167.0)

Originalité :

Je dessine le réseau avec mes petits pavés et c'est tout.
A aucun moment je ne décris quelque part les itinéraires, je ne les mémorise pas. Ils sont crées "ex nihilo", à la demande.
Je n'ai pas non plus d'analyse préalable du réseau. Juste le dessin. Là, c'est vraiment nouveau. ;)

Je ne raisonne pas en "zone de gares" pour limiter les recherches. Je n'ai, à priori, aucun besoin de limiter les recherches.
Les seules limites que j'ai fixées, sont :
-> 100 pavés maxi pour un itinéraire
-> 20 itinéraires maxi pour deux points A et B donnés (dans ma gare, j'ai le cas de 11 maxi)
On peut mettre moins ou plus, ce sont juste deux nombres à changer. En dépendent le temps de calcul et la taille mémoire.
Vous noterez que je n'ai pas de limite de nombre d'itinéraires (à part la place mémoire…)

Il s'ensuit que je peux aller de A à B, n'importe où.
Cela explique aussi que je n'ai aucun bouton pour gérer les itinéraires. Deux clics suffisent.

Pour être vraiment précis, "n'importe où", ce n'est pas tout à fait vrai :
-> le point de départ est à choisir sur une voie, juste à proximité du premier appareil de voie du futur itinéraire.
-> le point d'arrivée est, lui aussi, sur une voie, juste à proximité d'un appareil de voie.
On a plus de latitude pour le point d'arrivée puisqu'on n'impose pas que cet appareil de voie soit le dernier appareil de voie de l'itinéraire.
Vous le verrez en testant, on peut arriver sur une voie au point de contact avec un appareil de voie.

Donc, pas d'itinéraire d'un point en pleine voie vers un point en pleine voie et pas non plus d'itinéraire entre deux appareils de voies noyés dans un grill.
On pourrait le faire, mais la saisie d'itinéraire serait complexifiée. Et je ne suis pas sûr que ça corresponde à un besoin.

Je gère les boucles de retournement.
A ce sujet, ce n'est pas un réel problème puisque mes pavés n'ont pas de notion de sens.
Je cherche les itinéraires de connecteur en connecteur, un peu comme dans la solution de Jean-Luc.
Mais je ne permets pas de sortir d'une boucle : je bute volontairement sur l'aiguille d'entrée qui devrait avoir alors deux (!) positions.
En particulier, j'arrive ainsi à gérer une voie d'évitement dans une boucle. ;D

Comment tester ?

Je ne souhaite pas entrer dans les détails ici (je ferai des articles à la fin). Je fournis donc un mode d'emploi juste pour faire des essais.

Vous dé-zippez le fichier, vous allez dans le répertoire  et vous double-cliquez "TCO_V7_10.pde" (par exemple) et vous lancez (touche Play en haut à gauche).
A la question du choix de fichier, c'est très simple : il n'y en a qu'un !
Vous le choisissez donc.
Puis vous tapez c g i.
"c" pour (Charger le réseau) exemple
"g" pour supprimer la (Grille)
"i" pour passer en mode (Itinéraires).
Le curseur devient une bulle vous demandant le point de départ (au bout de la pointe)
Puis le curseur change pour connaitre le point d'arrivée.
Comme c'est pédagogique, il apparait des fenêtres pop-up donnant quelques renseignements.
Quelques OK plus tard, c'est fini.
Tous les itinéraires possibles entre A et B sont calculés. Mais on ne les voit pas encore.
On appuie sur "m" (Montre itinéraires) et une nouvelle bulle vous invite à les afficher un par un.
Un dernier appui sur M pour revenir au curseur normal (la flèche).

Dans la pratique, les itinéraires s'empilent dans un objet ArrayList.
Je cherche en effet à mémoriser tous les itinéraires d'une gare donnée, ce qui pourrait paraître contradictoire avec ce que j'ai dit au début. Mais non :

Cette partie du programme servira à donner un "poids" à chaque appareil de voie.
Je poursuis là une idée qui m'est chère visant à choisir le meilleur itinéraire parmi tous ceux possibles.

Le meilleur n'étant pas celui qui est le plus court, mais celui qui bloque le moins un grill de voie et donc améliore la fluidité.

 Le "poids" est simplement le nombre de fois qu'un appareil de voie est impliqué dans un itinéraire, en balayant tous les itinéraires possibles.
On ne le calcule qu'une fois, on le mémorise dans le pavé et c'est tout. Rassurez-vous : ça se fera juste en appuyant sur un bouton dans le programme TCO.
Si, par exemple, une aiguille sert dans 5 itinéraires, quand on l'utilise, on bloque potentiellement 4 autres itinéraires.
Donc, parmi tous les itinéraires entre A et B, on fait la somme des "poids" de chaque itinéraire en additionnant les "poids" de chaque appareil de voie le composant.
Le "poids" le plus faible l'emporte.
Incidemment, plus l'itinéraire est court, moins il utilise d'appareils de voie et plus il a de chance d'être le meilleur. Mais pas forcément et c'est dans ces cas là que ça devient intéressant.
Je vais tester avec ma gare et ses 180 itinéraires, pour voir.

J'en suis là.
J'aimerais votre avis. N'hésitez pas à poser des questions, à me dire si ça plante, etc…
10
Bus DCC / Re : Märklin Mobile Station 2
« Dernier message par Thierry le octobre 12, 2017, 09:03:30 am »
Je n'ai rien fait ni sur mes décodeurs de diverses provenances, ni sur la MS2, et tout marche bien...
Pages: [1] 2 3 ... 10