Auteur Sujet: bibliothèque DcDccNanoController  (Lu 487 fois)

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
bibliothèque DcDccNanoController
« 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.

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #1 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

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #2 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/) à faire soi même ou en soudant un circuit tout fait (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.
« Modifié: octobre 17, 2017, 11:29:38 am par Thierry »

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #3 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.

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #4 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 !

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #5 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...


Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #6 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.

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #7 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

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #8 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). 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.

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #9 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.
« Modifié: octobre 18, 2017, 12:25:33 pm par bagou91 »

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #10 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
« Modifié: octobre 18, 2017, 04:31:02 pm par Thierry »

petitrain

  • Jr. Member
  • **
  • Messages: 62
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #11 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

bagou91

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #12 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.

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 277
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #13 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 ?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 689
    • Voir le profil
Re : bibliothèque DcDccNanoController
« Réponse #14 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.