LOCODUINO

Parlons Arduino => Bibliothèques => Discussion démarrée par: bagou91 le octobre 14, 2017, 12:14:08 pm

Titre: bibliothèque DcDccNanoController
Posté 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.
Titre: Re : bibliothèque DcDccNanoController
Posté 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
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 17, 2017, 11:18:47 am
Dans l'absolu, rien n'empêche de gérer à la fois du DCC et des accessoires sur le même Arduino. Il y a pourtant trois inconvénients pratiques : la mémoire limitée comme tu l'as signalé, la complexité du croquis qui augmente, et les timing serrés en DCC forcément impactés par des appels réguliers à d'autres loop() comme celui d'Accessories qui n'est pas léger...
Au final, et vu le prix réduit d'un Nano en chine, il n'y a pas de bonne raison de ne pas séparer les deux usages. Un Nano pour le DCC, un autre pour les accessoires aidé par un petit montage façon mynabay (http://www.mynabay.com/dcc_monitor/ (http://www.mynabay.com/dcc_monitor/)) à faire soi même ou en soudant un circuit tout fait (http://www.dccinterface.com/product/arduino-model-railway-dcc-interface/ (http://www.dccinterface.com/product/arduino-model-railway-dcc-interface/))...

Pour ton code, il te faut déclarer un accessoire. Tu as déclaré un bouton poussoir Commanders, mais pas l'aiguillage qui va être piloté, un truc comme AccessoryMotorTwoWays ...

Enfin, il n'y a rien à injecter sur la voie. La partie accessoires se contente de lire ce qui passe sur la voie et en déduit si un accessoire doit être changé d'état.
Titre: Re : bibliothèque DcDccNanoController
Posté par: bagou91 le octobre 17, 2017, 12:16:21 pm
Je veux bien séparer sur plusieurs Arduino :)
Mon idée serait d'avoir 2 arduinos distant (ou +) pour la partie Accessoires: 1 en envoi d'ordre, (1 ou +) en récepteur(s).
J'aimerai donc:
- 1 arduino avec le DcDccNanoController pour le contrôle de la loco
- 1 arduino avec les boutons TCO et envoyer les ordres en DCC (librairie Commanders ? )
- 1 arduino avec les aiguilles, leds qui recoit les ordres en DCC (librairie Accessoires ? )

Les ordres DCC vont donc être envoyé par 2 contrôleurs sur la même voie.
Est-ce correct et possible ?
Ou vaut mieux t il séparer sur 2 liaisons distincts: d'un coté le contrôle de la loco avec DCC sur la voie et un autre bus de données pour le contrôle des accessoires ?

Merci pour ton aide à y voir plus clair dans l'utilisation de DCC.
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 17, 2017, 02:09:27 pm
Sur un réseau DCC, il ne peut y avoir qu'un seul contrôleur DCC, un seul émetteur. Donc je verrais plutôt :

- 1 arduino avec le DcDccNanoController pour le contrôle de la loco, et réception via bus (Serial, SPI, I2C, CAN,... avec Commanders) de commande extérieures
- 1 arduino avec les boutons TCO avec Commanders, capable d'envoyer les ordres en bus SPI, I2C, CAN ou autre, mais pas avec Commanders qui ne sait pas envoyer.
- 1 arduino avec les aiguilles, leds qui reçoit les ordres en DCC (librairies Commanders + Accessoires)

Il faut comprendre le rôle de Commanders. Cette bibliothèque reçoit des ordres via divers canaux possibles : boutons, encodeurs, bus I2C, SPI, CAN, ou encore DCC. D'autres sont à venir avec écran tactile, blutooth, wifi ou simplement radio 477Mz... Jamais Commanders n'envoie quoi que ce soit. Elle va simplement traduire tout ce qu'elle reçoit par divers moyens en quelque chose de plus simple, un événement, qu'un autre bout de code se chargera d'exploiter, comme Accessories qui va activer des accessoires selon le type et l'identifiant de l'événement, ou DcDccNanoController qui va le traduire en ordre DCC.
A titre d'information, il y a dans les exemples de Commanders des croquis qui envoient des données sur les bus pré-cités. Tu constatera que ces exemples n'utilisent pas Commanders !
Titre: Re : bibliothèque DcDccNanoController
Posté par: bagou91 le octobre 17, 2017, 02:48:00 pm
Je commence à comprendre un peu mieux le rôle de chaque librairie... :)

Encore une question par rapport à ce que tu indiques:
Citer
ou DcDccNanoController qui va le traduire en ordre DCC

Est-ce que cela veut dire que si j'ajoute I2CCommander.begin(address_slave); dans le setup() de DcDccNanoController, ce dernier va écouter sur le bus I2C et renvoyer automatiquement des ordres reçus vers les accessoires sur bus DCC sans rien ajouter de plus au code ?
Evidemment il faut que mes pins SDA/SCL soient librent.
Auquel cas j'ajoute un Arduino avec TCO qui communique en I2C vers l'arduino DcDccNanoController
Et un autre Arduino en écoute DCC pour commander mes accessoires.

Sinon je sépare vraiment la partie contrôle loco de la partie TCO accessoires...

Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 17, 2017, 03:19:45 pm
Dans un monde idéal, ce serait ça. Mais (parce qu'il y a un 'mais'), pour passer outre les problèmes de mémoire sur un Nano, j'ai du vider DCC++ de bon nombre de fonctionnalités, et notamment de l'envoi de commandes accessoires par du texte. Il faudrait remettre au moins une commande minimaliste genre AccessoryPacket(int address, int subaddress, int activate) dans le DCC++ utilisé par DcDccNanoController... Et dans ton croquis, la réception d'un événement I2C pourrait appeler cette fonction.
Titre: Re : bibliothèque DcDccNanoController
Posté par: bagou91 le octobre 17, 2017, 03:31:10 pm
OK merci pour toutes ces infos.

Je vais dans un 1er temps m'essayer en séparant les rôles et utiliser l'I2C pour la partie TCO accessoires
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 17, 2017, 10:33:19 pm
Je viens de pousser une version 1.11, récupérable à l'endroit habituel (https://framagit.org/locoduino.org/DcDccNanoController/blob/master/DcDccNanoController.zip (https://framagit.org/locoduino.org/DcDccNanoController/blob/master/DcDccNanoController.zip)). Elle corrige un problème de paquet de fonction qui ne se répétait pas, et ajoute une fonction setAccessory() à la class DcDccController (non testée...). Cette fonction envoie un paquet Dcc pour piloter un accessoire.
Titre: Re : bibliothèque DcDccNanoController
Posté par: bagou91 le octobre 18, 2017, 10:25:40 am
Bonjour Thierry,

Merci pour la correction et ajout de fonctionnalité :)

Une question:
J'ai vu dans le dossier extra qu'il y a les sources ArduiEmulator.
Si je le compile avec VS2015, cela me donne un Emulateur Arduino capable d'exécuter le sketch DcDccNanoController ?
On peut contrôler les pins I/O de l'arduino en interface graphique ?

J'ai ouvert le projet avec VS2015 et tenté de compiler: fichier ArduiEmulator.inc introuvable.
Il est manquant dans les sources.
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 18, 2017, 04:11:57 pm
Oui, c'est exactement ça. Je crois que je vais ouvrir un sujet exprès sur le forum. http://forum.locoduino.org/index.php?topic=393.msg3797#msg3797 (http://forum.locoduino.org/index.php?topic=393.msg3797#msg3797)
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le octobre 21, 2017, 01:44:16 pm
Bonjour,
je reposte ma requette ici, je viens de voir qu'il y avait un sujet ouvert pour la  bibliothèque DcDccNanoController:
 
Bonjour,
Quand j’essaie de compiler le sketch arduino, après avoir installer toute les bibliothéques, l’IDE me renvoie un message d’erreur (apparement sur la bibliothèque Commanders) peut-être avez-vous une idée pour résoudre cette énigme !
Merci d’avance ;
Je vous joint le code d’erreur :

Demo:22 : error : ’ButtonsCommanderSwitchOnePin’ does not name a type
ButtonsCommanderSwitchOnePin buttonF0 ;
Demo:23 : error : ’ButtonsCommanderSwitchOnePin’ does not name a type
ButtonsCommanderSwitchOnePin buttonF1 ;
/Applications/Arduino.app/Contents/Java/libraries/DcDccNanoController/examples/Demo/Demo.ino : In function ’void setup()’ :
Demo:33 : error : ’buttonF0’ was not declared in this scope
buttonF0.begin(EVENT_FUNCTION0, A1) ;
Demo:34 : error : ’buttonF1’ was not declared in this scope
buttonF1.begin(EVENT_FUNCTION1, A2) ;
exit status 1
’ButtonsCommanderSwitchOnePin’ does not name a type
Titre: Re : bibliothèque DcDccNanoController
Posté par: bagou91 le octobre 21, 2017, 02:27:01 pm
Pour ma part, je compile avec l'IDE Arduino version 1.6.9 et n'ai pas de problème de compilation avec ce sketch.

Vérifies bien que tes librairies soient bien installées et reconnu dans le gestionnaire de bibliothèques Arduino.
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 22, 2017, 11:31:21 am
Bonjour

Oui, le problème semble venir de l'installation de Commanders. L'arborescence de toutes les bibliothèques devrait ressembler à cela :

Mes Documents
     ...
     Arduino
          ...
          Libraries
               ...
               Commanders
                    src
                         Commanders.h
               DcDccNanoController
                    src
                         DcDccNanoController.h
               DIO2
                    src
                         Dio2.h
               LcdUi
                    src
                         LcdUi.h

et l'arborescence que je vois dans le message d'erreur est très étrange :/Applications/Arduino.app/Contents/Java/libraries/DcDccNanoController/examples/Demo/Demo.ino

Que fait DcDccNanoController dans les librairies java ?
Titre: Re : bibliothèque DcDccNanoController
Posté par: Jean-Luc le octobre 22, 2017, 12:34:30 pm
Curieusement, /Applications/Arduino.app/Contents/Java/libraries est l'emplacement où sont stockées les bibliothèques fournies avec l'IDE Arduino. C'est bizarre que ça soit dans Java mais c'est comme ça (ou pas, peut être que l'IDE, dont les .jar sont dans Applications/Arduino.app/Contents/Java/, considère ce répertoire comme la racine.

Par contre que DcDccNanoController ait été installé là n'est pas du tout normal. L'utilisateur ne doit rien installer dans le Bundle de l'application (Sur Mac, les application sont en fait des répertoire dans lesquels on va trouver l'exécutable mais également les resources (images, sons, ... et ici les outils de développement pour AVR, les bibliothèques, etc), ici Arduino.app. Vu du Finder c'est un fichier comme un autre et l'on déplace, installe, désinstalle l'IDE Arduino en manipulant ce qui apparaît comme un unique fichier.

Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le octobre 22, 2017, 07:22:39 pm
Merci pour vos réponses,
mais mon problème reste le même, à savoir le compilateur me donne toujours des erreurs sur la déclaration des boutons avec Commander: "ButtonsCommanderSwitchOnePin’ does not name a type" et dans le setup :"’buttonF1’ was not declared in this scope.
J'ai installé la dernière version de l'IDE version 1.8.5 comme le sugérait "bagou91".
Une reflexion de J. Luc m'a alerté:"Par contre que DcDccNanoController ait été installé là n'est pas du tout normal..."
J'ai été relire l'article "Comment installer une bibliothèque" et j'ai effectivement remis toutes mes bibliothèques perso
dans un dossier comme expliqué.
Malheuresement, le sketch DEMO me donne toujours les mêmes erreurs:
En jetant un oeil sur la bibliothèque Commander, le constructeur pour les switchs-->ButtonsCommanderSwitch et non ButtonsCommanderSwitchOnePin est-ce que je n'ai pas la bonne version de la bibliothèque???
J'ai lu et relu les articles correspondants mais je n'ai pas trouvé ma solution...
Merci pour votre aide.
 
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 22, 2017, 08:44:51 pm
Dans Arduino/Libraries/Commanders/src il doit y avoir ButtonsCommanderSwitch.h, ButtonsCommanderSwitchOnePin.h et ButtonsCommanderSwitchTwoPins.h . Si ce n'est pas le cas, alors effectivement la bibliothèque n'est pas de la bonne version. Il faut une 1.50 ou plus, comme celle proposée par l'article. J'ai vérifié, c'est la bonne...
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 22, 2017, 08:51:52 pm
Pour compléter, et parce que je suis persuadé que vos problèmes ne sont dû qu'à une mauvaise installation, pouvez vous vérifier avoir exactement la même arborescence que ce que je disais ce matin ?

Documents
     ...
     Arduino
          ...
          Libraries
               ...
               Commanders
                    src
                         Commanders.h
               DcDccNanoController
                    src
                         DcDccNanoController.h
               DIO2
                    src
                         Dio2.h
               LcdUi
                    src
                         LcdUi.h

Parce qu'en l'occurence, le sujet ne souffre pas d'approximation. Vous devez avoir cette arborescence, sinon vous ne pourrez pas compiler correctement !
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le octobre 22, 2017, 10:28:59 pm
Houra!!!!!
Ca y est, ça compile! C'était une ancienne version de Commander qui n'allait pas....Je l'avais charger au tout début avec votre article : ça marchait très bien et j'ai du rater des mises à jour.
L'arborescence n'était pas en cause mais la remarque de J.Luc m'a permit de remettre de l'ordre dans mes dossiers.
J'attends maintenant avec impatience les composants commandés pour tester votre bibliothèque.
Encore merci.
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 23, 2017, 09:38:45 am
Super. Content d'apprendre que ça marche. Je n'ai pas encore compris le mécanisme en charge de la mise à jour des bibliothèques... Encore un domaine à creuser.
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le octobre 24, 2017, 09:09:48 am
Pour les mises à jour, c'est juste pas possible à partir de forges autres que les grands sites comme Github, BitBucket ou Gitlab. Hors de ces sites, point de salut. Donc la mise à jour de nos bibliothèques assurée par l'IDE lui même ne sera pas possible avant longtemps. Dans la discussion avec le gars concerné sur le github de l'IDE, il m'a quand même conseillé d'ajouter 'locoduino_' comme préfixe au nom de toutes nos bibliothèques pour éviter d'éventuelles collisions de nom... Je ne trouve pas l'idée très élégante.
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le décembre 09, 2017, 05:27:57 pm
Bonjour,

Je commence à câbler la petite centrale pour le club ( les produits sont longs à arriver!!) et je ne voudrais pas faire de bêtise.
Concernant les boutons:
-Vitesse + bouton momentané : il faut mettre des résistances? vers le + ou vers le moins?
-F1 et F0 : bouton à deux positions fixes?
-DC/DCC : bouton à deux positions fixes ou momentané?
-Echap : bouton momentané ?
-Urgence : bouton momentané?
- J'ai rajouté un bouton marche/arret et une petite alim 12V mais là, pas d'hésitation.
Si quelqu'un a des réponses à mes questions, merci d'avance;
Titre: Re : Re : bibliothèque DcDccNanoController
Posté par: Thierry le décembre 09, 2017, 05:47:02 pm
-Vitesse + bouton momentané : il faut mettre des résistances? vers le + ou vers le moins?
Pas de résistance pour moi, mais d'autres en ont mis...
Citation de: petitrain
-F1 et F0 : bouton à deux positions fixes?
Oui, bien que ça puisse marcher avec un poussoir.
Citation de: petitrain
-DC/DCC : bouton à deux positions fixes ou momentané?
Positions fixes. Il faut démarrer avec le bouton dans la bonne position...
Citation de: petitrain
-Echap : bouton momentané ?
Oui, forcément.
Citation de: petitrain
-Urgence : bouton momentané?
Oui, mais on pourrait le gérer différemment. Ce n'est pas ce que j'ai fait...

Pour moi le plus dur a été de trouver un boitier adapté, du coup je l'ai fabriqué avec des chutes de contre-plaqué de 5mm et un peu de Forex.

Bon courage...
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le décembre 09, 2017, 08:32:42 pm
merci pour cette réponse rapide,
je vais, moi aussi fabriquer une boite adaptée, je mettrai des photos quand ça marchera...

 Pour l'encodeur, tu n'as pas mis de résistances mais, est-ce que la bibliothèque Commander se sert des résistances internes de l'Atmega ? j'ai vu qu'il y avait des encodeurs montés sur des petits PCB , avec des résistances soudées dessus. Celui que j'ai est nu et il faut normalement des résistances (sauf si Commander se sert des résistances internes) ; Je pense que le pullup interne est activé car, sur les boutons F0 et F1, il n'y a pas de résistances, j'ai raison?
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le décembre 09, 2017, 09:01:42 pm
Oui tu as raison, Commanders active bien les PULLUP de l'Arduino, mais l'ami Xavier, dans son commentaire du 11 octobre associé à l'article a expliqué qu'il avait dû ajouter du 5V sur l'une des entrées de l'encodeur pour que ça marche... Ça dépend sans doute du modèle d'encodeur.
Et mes encodeurs sont aussi tout nu !
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le décembre 10, 2017, 10:36:52 am
Ok, merci
, je vous tiens au courant de l'avancement des travaux...
Titre: Re : bibliothèque DcDccNanoController
Posté par: gerard31 le décembre 10, 2017, 03:08:52 pm
Bonjour,
J'utilisé un encodeur KY-040 qui demande du 5 volts  sans aucun souci  pour le fonctionnement de la centrale.
Amitiés
Gérard
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le mars 03, 2018, 05:19:25 pm
Bonjour,
Après l'attente des différents composants, on est heureux de vous présenter les petites centrales que l'on a fait.
La première est fonctionnelle est fonctionne très bien.
La deuxième (celle du train jaune) attend un autre afficheur, celui envoyé par AliExpress ne fonctionne pas!!!
La troisième attend encore ces composants....
Au sein du club, elles vont faire bien des émules.
Une question qui revient souvent : Pourquoi se limiter a une seule machine? elle pourrait servir sur plein de petits réseaux!!!
Merci au concepteur ....
Titre: Re : bibliothèque DcDccNanoController
Posté par: Thierry le mars 03, 2018, 06:05:47 pm
Superbe ! Ravi que la bibliothèque soit utilisée .
J'ai limité à une seule loco faute de mémoire dans un Nano pour gérer plus. J'ai déjà prévu une bibliothèque plus étoffée sur la même base mais pour un Mega ou plus qui s'appellera DcDccController, sans le nano donc. L'inconnue pour moi aujourd'hui, c'est encore l'interface utilisateur... Un afficheur par loco ? Un grand écran avec un système de bascule entre les locos pilotées ? Je ne sais pas. En tout cas, c'est prévu, même si ça n'arrivera peut être pas tout de suite. Après DcDccNanoController et DCCpp, j'ai décidé de faire une pause développement et de me remettre à mon propre réseau qui n'a pas bougé depuis deux ans !
Titre: Re : bibliothèque DcDccNanoController
Posté par: petitrain le mars 04, 2018, 05:07:35 pm
He oui, Arduino c'est bien mais il faut quand même jouer un peu au train!!!!
Du côté afficheur, on trouve des afficheurs graphiques un peu plus performants que les 16*2 ou 20*4 et dans les mêmes gammes de prix. Je ne connais pas les besoins de cette nouvelle centrale, sinon il y a aussi la gamme Nextion mais bien plus cher.
Le top : tout sur un grand écran couleur, tactile (genre tablette) pas de bouton, pas de débounce....et si on a le wifi, on peut lire le journal pendant que les trains tournent!!!!

Juste une petite question : Est-ce qu'on pourrait sortir le réglage d'adresse du tableau config. et demander une adresse directement dans le tableau controler, ou un deuxième encodeur qui sélectionnerait des adresses déjà pré-inscrite .
Je pense à un petit réseau avec, mettons, 2 voies d'évitement, ou on pourrait faire tourner 3 machines...
D'abord, est-ce envisagable? est-ce un grand travail? et est-ce qu'un néophyte peut le réaliser ...