LOCODUINO

Un TCO xpressnet

.
Par : Nicolas Zin

DIFFICULTÉ :

Commençons par une explication visuelle de mon TCO et une partie de sa construction.

Je possède actuellement une centrale DCC, qui a la particularité de parler xpressnet, et j’ai la joie de posséder une Multimauss comme télécommande. En plus d’une Multimauss je voulais un Tableau de Controle Optique pour contrôler mes aiguillages (disons que la Multimauss, c’est bien, mais retenir les numéros des aiguillages c’est un peu pénible).

Comme je suis en DCC, je voulais éviter d’avoir un fouillis de câbles à tirer (2 par aiguillage), mais plutôt avoir un TCO qui parle Xpressnet, pour envoyer les ordres aux aiguillages. Bref quelque chose comme :

Ca veut dire :

  • un TCO avec des boutons
  • un Arduino qui va récupérer l’état des boutons
  • et le même Arduino qui va envoyer les ordres par xpressnet

Récupérer l’état des boutons

Ca c’est pas très compliqué. Un petit schéma électrique comme ci-dessous, et ca marche rapidement :

On utilise digitalRead() et on obtient HIGH ou LOW, selon l’état du bouton. Simple.

Liaison RS485

Ensuite, pour connecter l’Arduino à la centrale c’est un peu plus compliqué. Le protocole xpressnet est basé sur une liaison RS485, sur du câble téléphonique à 6 fils (RJ12). Attention ce n’est pas du RJ11 (la prise est la même, mais il n’y a que 4 fils). Le RS485 c’est une liaison half-duplex sur 2 fils, avec une différence de voltage de +/- 5v. Pour piloter ce genre de liaison, on utilise un chipset Max485cpa. Voici une image tirée de la documentation du Max485 :

Dans le cas de xpressnet, on a 6 fils :

  • 2 avec le DCC (+ et -) si on souhaite lire les paquets
  • 2 fils d’alimentation (si on veut avoir une télécommande auto-alimentée)
  • et les 2 fils de liaison (nommé A et B).

Voilà comment j’ai câblé, cf ci-dessous. On remarquera que j’ai la même terre, mais je n’utilise pas l’alimentation 12v. Simplement parce que je n’autoalimente pas (encore) mon TCO, mais ca va venir. Autre point : si votre communication avec la centrale ne marche pas inverser A et B. Pour moi il y a un sens A-B qui marche et pas l’autre.

Honnêtement c’est la partie la plus difficile à debugger : savoir si le câblage physique est bien fait. J’ai même été jusqu’à utiliser un oscilloscope bon marché. Sinon il existe des PCB tout fait pour Arduino, mais je ne sais pas ce que ça vaut.

Choix de l’Arduino

Pour mon montage j’ai utilisé un Arduino Mega 2560. Pourquoi ? Parce que xpressnet est un protocole série 9 bits a 62.5 kbit/s. Le SDK Standard d’Arduino ne propose pas de bibliothèque série 9 bits, mais quelqu’un l’a fait sur un Arduino mega 2560, par conséquent le choix de l’Arduino est limité.

Il faut donc :

  • avoir un Arduino Mega 2560 ;
  • récupérer dans mon dépot, dans le répertoire arduinoSdk les fichiers HardwareSerial.h et HardwareSerial.cpp ;
  • les utiliser pour remplacer ceux dans le SDK Arduino (dans /hardware/arduino/avr/cores/arduino/) ;
  • et bien entendu choisir Arduino Mega 2560 dans l’IDE d’Arduino IDE (dans Tools/Board)

Une fois tout ca fait, on est prêt pour la partie logicielle.

Le code

Tout le code se trouve sur mon depôt : https://github.com/nzin/xpressnet_a....
Ce que fait le code :

  • la fonction setup() va initialiser la communication xpressnet (le port, la vitesse ...)
  • la fonction loop(), va appeller decodeXpressnet, si des données sont présentes
  • la fonction decodeXpressnet(), va décoder les trames xpressnet
  • si c’est à nous de parler (car la centrale attribue à tour de rôle aux 32 possibles télécommandes un droit de parole) alors j’appelle la fonction poolEvent()
  • et c’est là que vous pouvez mettre votre code (comme lire l’état du TCO, et agir en conséquence)
  • pour envoyer des ordres les différentes commandes mettent ca dans une pile (XpressCommand *stack) et le code va envoyer les commandes les une après les autres, car on a le temps d’envoyer juste une commande par temps de parole.

Attention : pour activer un aiguillage, il faut envoyer 2 commandes :

sendSwitchCommand(<aiguille>,<sens: 0 ou 1>,1);
sendSwitchCommand(<aiguille>,<sens: 0 ou 1>,0);

la première active le changement de commande, la deuxième arrête l’activation. Le protocole veut ça.

Par conséquent, on peut mettre dans poolEvent quelque chose comme le code ci-dessous :

  • on va envoyer la prochaine commande qui était dans la pile
  • on regarde l’état du TCO (commande checkTCOState())
  • et ensuite toutes les 3 secondes on va basculer sur la gauche l’aiguille 37, et 3 secondes plus tard, on le remet dans sa position initiale.
const int turnout=37;

void poolEvent() {
  XpressCommand *ptr;
  if (stack!=NULL) {
    ptr=stack;
    ptr->writeData(GIO_RXTX,Serial1);
    stack=ptr->next();
    delete ptr;
  }
  
  checkTCOState();
  
  if (count==0) {
    count=millis();
  }
  if (millis()>count+3000) {
    count=millis();
    switch(ope++) {
      case 0:
        sendSwitchCommand(turnout,1,1);
        sendSwitchCommand(turnout,1,0);
        break;
      case 1:
        sendSwitchCommand(turnout,0,1);
        sendSwitchCommand(turnout,0,0);
        ope=0;
      break;
    }
  }
}

Mais on n’est pas obligé de juste piloter des aiguillages :

  • sendStopallLocomotivesRequest() demande à arrêter toutes les locomotives ;
  • sendStopOperationsRequest() doit arrêter tout le réseau (couper l’alimentation sur le réseau DCC) ;
  • sendResumeOperationsRequest() doit rétablir l’alimentation ;
  • et vous pouvez re-implémenter les autres commandes xpressnet en lisant la documentation officielle : http://www.lenzusa.com/1newsite1/Ma....

Après je vous laisse explorer le code, et me poser des questions :-)

63 Messages

  • Un TCO xpressnet 26 janvier 2015 20:33, par DDEFF

    Bonjour Nicolas,
    Excellent sujet, bien traité, agréable à lire.
    (Nous nous sommes déjà causé par mail en novembre et j’avais déjà vu ces vidéos très didactiques)
    Peux-tu me dire ce que c’est que "ces petits machins, là" qui sont entre l’Arduino et les boutons ?
    Je sais que l’essentiel n’est pas là, bien sûr...

    Répondre

  • Un TCO xpressnet 26 janvier 2015 20:44, par Nicolas Zin

    Salut Denis,

    les modules au dessus c’est des petits PCB (Printed Circuit Board) que j’ai fait pour me simplifier a vie. Mais j’ai perdu les plans avec un disque dur qui m’a laché. Mais honnetement c’est pas tres compliqué.
    Ca me sert a cabler ca : une alimentation 5v (qui vient de l’arduino) qui va a l’interrupteur, de l’interrupteur qui va a une entree de l’arduino, et j’avais mis une resistance entre l’entree de l’arduino et la masse. Mais apres coup on m’a dit que ca ne servait a rien : les pin de l’arduino quand ils sont mis en mode input, ont une resistance de 100k ohm.

    bref ca fait 5V -> switch <-> entree arduino

    Ca me permet de savoir si l’interrupteur est ouvert (dans ce cas je lis 0V), ou fermé (dans ce cas je lis 5V).

    Et sinon si tu te poses la question, pour le shield custom sur l’arduino, c’est pour le protocole Xpressnet (RS485), il y a un chip max485 et les branchements pour le connecter au port serie de l’arduino : https://github.com/nzin/xpressnet_a...
    Mais a refaire j’en chercherais un dans le commerce tout fait , genre : http://arduino-info.wikispaces.com/...

    tu as vu le code sur github aussi et les schemas ? https://github.com/nzin/xpressnet_a...

    Répondre

    • Un TCO xpressnet 16 février 2015 21:55, par jérôme SAVARY

      Salut Nicolas,

      je viens de faire le test du montage arduino pour la détection de la position de l’interrupteur.

      sans la résistance, l’arduino se met en court-circuit.

      par contre en changeant le montage de la façon suivante :

      GND <=> INT <=> Pin X

      avec le parametre suivant :

      int bouton1 = 50 ;
      pinMode(bouton1, INPUT_PULLUP) ;

      du coup,
      au repos, la broche 50 est en état "HIGH".
      au travail, la broche 50 est en état "LOW".

      plus de detail sur : https://github.com/jsavary/Arduino/tree/master/Lecture_etat_interrupteur

      j’espère que ce montage ( sans résistance ) sera compatible avec le TCO Xpressnet moyennant le changement de lecteur d’état.

      @+
      Jerome.

      Répondre

      • Un TCO xpressnet 17 février 2015 03:19, par Nicolas Zin

        fun, je ne connaissais pas la constante INPUT_PULLUP

        Sinon ca me parait bien oui.

        Répondre

  • Un TCO xpressnet 26 janvier 2015 23:07, par DDEFF

    Bien sûr, j’ai lu tout ce qu’il y a sur ta librairie.
    Mais j’avoue que je n’ai pas tout compris.
    J’ai déjà programmé, mais surtout des problèmes de bases de données, parfois tordus aussi.
    Il me faut m’habituer au C et C++ où j’ai encore de vraies lacunes.
    Sur un autre site, j’ai vu un programme que je comprends plus (mais pas entièrement) qui utilise ta bibliothèque.

    Je cherche aussi à essayer d’arrêter un train de façon réaliste.

    Voir en ligne : http://fadiese.hd.free.fr/barbadidoua/index.php++cs_INTERRO++page=accessoire-xpressnet-2

    Répondre

  • Un TCO xpressnet 26 janvier 2015 23:34, par Nicolas Zin

    Comment je peux t’aider ?

    Un petit guide que j’avais envoyé à quelqu’un d’autre pour l’aider à commander un aiguillage :

    il faut faire
    sendSwitchCommand()
    Ca va le placer dans la pile des ordres a envoyer.

    Ensuite, il faut boucler sur

    if (Serial1.available ())
    decodeXpressnet((int) Serial1.read ()) ;

    Le protocol xpressnet est un protocol master/slave.
    Le master est la centrale DCC, les slaves sont les "telecommandes" :

    • le master va demander un par un a chaque telecommande si elle a quelque chose a envoyer (une fenetre d’envoi). (il y a max 16 slaves. dans mon cas, mon slave a en dur l’adresse MYADDRESS qui vaut 4).
    • a ce moment la, si c’est au tour de ton slave, ET SEULEMENT A CE MOMENT, il faut envoyer la commande. C’est ce que fait decodeXpressnet() : il lit les paquets transitant sur le cable, il verifie si c’est le bon moment pour envoyer la commande ( ((data & 0x60) == 0x40) && (address==MYADDRESS) ), alors il appelle poolEvent().
    • poolEvent() en particulier dans le code va prendre un ordre dans la pile et l’envoyer :

      void poolEvent()
      XpressCommand *ptr ;
      if (stack !=NULL)
      ptr=stack ;
      ptr->writeData(GIO_RXTX,Serial1) ;
      stack=ptr->next() ;
      delete ptr ;

      ...

    Donc pour resumer, tu mets des ordres dans la pile, et decodeXpressnet() + poolEvent() vont envoyer cet ordre au bon moment.

    Est ce que ca te parait plus clair ?

    Répondre

    • Un TCO xpressnet 28 janvier 2015 17:15, par DDEFF

      Merci Nicolas,
      C’est sympa d’avoir détaillé.
      Je vais décortiquer. Je vais bientôt avoir plus de temps pour bien comprendre.
      A bientôt

      Répondre

  • Un TCO xpressnet 6 février 2015 11:54, par jérôme Savary

    Bonjour Nicolas,

    ce que j’ai du mal à comprendre c’est comment sont branchés les interrupteurs entre l’arduino et le "couvercle de la boite" c’est à dire les PCB.

    j’ai bien compris le qu’entre l’arduino et le PCB il n’y a qu’un seul fil de masse (GND) puisque c’est le PCB qui "distribue" cette masse.

    mais si je compte bien, il y a 31 interrupteurs.
    soit :
    31 fils "+5V" reliés à l’arduino.
    1 fil de masse (GND) relié à l’arduino.

    donc pour moi (selon la compréhension que j’en ai) il faut 32 fils entre le PCB et l’Arduino.

    hors , sur la vidéo, j’ai pas l’impression qu’il y en ai autant.
    (il me semble compter que 3 fils entre le PCB et l’arduio).

    quel est donc ce mystère ?

    Merci pour tes explications.
    Jerome.

    Répondre

    • Un TCO xpressnet 6 février 2015 15:53, par Nicolas Zin

      Bonjour,

      je réponds vite fait. Tu as tout a fait raison : oui j’ai bien 33 fils :

      • un pour le GND
      • un pour le 5V
      • 31 fils pour les interrupteurs. (1 par interrupteur)

      Si ca ne figure pas dans la video, c’est peut etre que je ne l’avais pas cablé a ce moment là, mais dans un TCO fonctionnel, ils y sont bien !

      J’essayerais de poster une photo, mais ca ne va pas etre avant 15 jours.

      Répondre

      • Un TCO xpressnet 6 février 2015 16:17, par Jean-Luc

        Bonjour,

        Je viens de regarder la vidéo en plein écran sur un 27". Vers 55’’, le TCO est ouvert et on voit que les fils sont en fait des nappes d’environ 10 conducteurs et qu’il y en à trois. Sur la droite il y a d’autres fils. Les 33 fils semblent bien y être.

        Répondre

      • Un TCO xpressnet 6 février 2015 21:25, par Jérôme Savary

        Ouf, je suis pas trop bête ^^

        Merci pour cette précision Nicolas.

        Répondre

  • Un TCO xpressnet 8 février 2015 10:25, par jerome savary

    pas de soucis.

    je viens d’acheter 2 arduino UNO pour les accessoires et 1 Arduino Mega pour le TCO.

    mais là c’est SKI !!!!! donc, je vais voir ça au ralenti.

    Répondre

  • Un TCO xpressnet 16 février 2015 23:10, par jérôme SAVARY

    bonsoir nicolas,

    je lis ton code petit à petit et bien entendu je me fais des noeuds au cerveau (mais c’est bon ! ^^ )

    j’aimerais être bien sûr de comprendre ceci :

    /********************* TCO state *******************/
    // pin id, turnout id, isLeftOn1 (i.e. reverse the command state), currentState
    int button[][4]={
      {31, 37, LOW, LOW},
      {32, 38, HIGH,LOW},
      {33, 12, HIGH,LOW},
      {34, 40, LOW, LOW},
    };

    où :
    [4] = 4 déclarations de duo interrupteur <=> aiguillage.
    31 = Pin de l’arduino mega
    37 = Adresse du decodeur d’aiguillage
    LOW = ?? là je sèche
    LOW = état actuel ( mais je comprend pas la difference entre isLeftOn1 et currentState)

    Par avance, merci de ta réponse.
    Bonne soirée
    Jérôme.

    PS : il y a certains caractères qui ne passe pas dans la recopie du code. (les accolades).

    Répondre

  • Un TCO xpressnet 17 février 2015 05:36, par Jean-Luc

    Bonjour Jérôme.

    j’ai rectifié pour les accolades. Il faut encadrer le code par :

    <code class="arduino sans_telechargement">

    et

    </code>

    Répondre

  • Un TCO xpressnet 20 février 2015 22:06, par jerome SAVARY

    bonjour,

    j’ai un petit soucis lors de la compilation du projet :

    Arduino : 1.5.8 (Windows 8), Carte : "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
    
    Build options changed, rebuilding all
    
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:93:41: error: attempt to use poisoned "SIG_USART0_RECV"
     #if !defined(USART_RX_vect) && !defined(SIG_USART0_RECV) && \
                                             ^
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:103:15: error: attempt to use poisoned "SIG_USART0_RECV"
     #elif defined(SIG_USART0_RECV)
                   ^
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:137:15: error: attempt to use poisoned "SIG_USART1_RECV"
     #elif defined(SIG_USART1_RECV)
                   ^
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:151:15: error: attempt to use poisoned "SIG_USART2_RECV"
     #elif defined(SIG_USART2_RECV)
                   ^
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:165:15: error: attempt to use poisoned "SIG_USART3_RECV"
     #elif defined(SIG_USART3_RECV)
                   ^
    Erreur lors de la compilation.

    là j’avoue que je ne vois pas...
    si quelqu’un pouvait m’aider svp.

    j’ai pourtant bien mis le fichier "HardwareSerial.cpp" et "HardwareSerial.h" de Nicolas Zin, mais ca ne passe pas.

    merci d’avance.
    Jerome

    Répondre

    • Un TCO xpressnet 21 février 2015 14:02, par Jean-Luc

      Bonjour Jérôme.

      Les noms des vecteurs d’interruption ont changé récemment. Le patch d’Hardware Serial utilise sans doute les anciens noms.

      Edite HardwareSerial.cpp, va aux lignes indiquées par le compilateurs et :

      • remplace SIG_USART0_RECV par USART0_RX_vect
      • remplace SIG_USART1_RECV par UART1_RX_vect
      • remplace SIG_USART2_RECV par UART2_RX_vect
      • remplace SIG_USART3_RECV par UART3_RX_vect

      Et dit nous ce qu’il en est.

      Répondre

  • Un TCO xpressnet 1er mars 2015 14:10, par jerome SAVARY

    Bonjour.

    C’est à dire que le programme ne marque plus d’erreur lors du téléversement.

    En revanche le résultat n’est pas celui attendu.
    mais là j’émet quelques réserves sur mon câblage et/ou sur ma compréhension du code ( broche de l’interrupteur, adresse du décodeur d’aiguillage.)

    bon week end.
    Jerome.

    Répondre

  • Un TCO xpressnet 22 janvier 2016 19:55, par Juan

    bonjour,

    j’ai un petit soucis lors de la compilation du projet :

    Arduino:1.6.7 (Windows XP), Placa :"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    HardwareSerial.cpp:293 : error : prototype for ’HardwareSerial::HardwareSerial(ring_buffer*, ring_buffer*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)’ does not match any in class ’HardwareSerial’

    Répondre

    • Un TCO xpressnet 22 janvier 2016 20:32, par Nicolas Zin

      J’imagine que tu as bien récupéré les fichiers HardwareSerial.h et HardwareSerial.cpp et tu les as placé dans /hardware/arduino/avr/cores/arduino/ ?

      J’espere qu’ils n’ont pas changé le prototype :-(

      Répondre

  • Un TCO xpressnet 23 janvier 2016 20:05, par Juan

    Je mis à jour Arduino
    Les fichiers HardwareSerial.h et HardwareSerial.cpp as placé dans /hardware/arduino/avr/cores/arduino/
    Maintenant compiler sans erreur
    Merci beaucoup

    Répondre

  • Un TCO xpressnet 4 mars 2016 13:54

    Bonjour et merci pour ce que vous avez fait !
    Une question : pensez-vous que je peux utiliser ce formulaire

    http://www.amazon.it/MAX485-Modul-R...

    pour l’interfaçage avec Arduino ?
    Merci

    Répondre

    • Un TCO xpressnet 4 mars 2016 15:19

      Salut,

      oui j’avais vu cette interface, et je pense que ca convient tout a fait !!!
      Je ne l’avais pas utilisé, simplement parce que je ne l’avais pas trouvé à l’époque, mais définitivement ca serait à tester !

      Nicolas

      Répondre

  • Un TCO xpressnet 25 avril 2016 11:28, par Juan

    Bonjour :
    Je me suis connecté l’Arduino Mega avec un centre de lenz.
    Avec le module
    http://arduino-info.wikispaces.com/...
    Seulement, il apparaît sur l’écran d’ordinateur "--- starting ---".
    Je pense que le Arduino et le centre ne sont pas connectés.
    Où puis-je trouver le problème ?
    Merci

    Répondre

    • Un TCO xpressnet 5 juin 2016 03:36, par Nicolas Zin

      Bonjour ca date un peu, mais j’avais oublié de répondre.
      Est ce que tu as trouvé ton problème ?
      Est ce que tu as un oscilloscope pour voir si les paquets passent bien ?

      Répondre

    • Un TCO xpressnet 21 septembre 2016 00:29, par jerome SAVARY

      Bonsoir,

      je suis exactement dans le même cas.

      "--- starting ---".

      et puis plus rien...

      J’avoue que je désespère un peu de faire fonctionner mon TCO Xpressnet

      Please Help !

      J’ai réduit le câblage à sa plus simple expression.
      comme dans ce topic : l’arduino, un interrupteur et un max485( http://composants.e44.com/circuits-...).

      Mais rien ne se passe...

      J’ai une centrale multimauss en version 1.00 (en adresse DCC 13) avec un booster roco 10761.
      mon décodeur d’aiguillage est un roco 61196 en adresse DCC 27.

      Merci d’avance.
      Jerome.

      Répondre

      • Un TCO xpressnet 21 septembre 2016 03:33, par Nicolas Zin

        Salut,

        • Est ce que tu as essayé d’inverser A et B ? (Perso je ne sais jamais dans quel ordre les mettre alors je teste les 2 positions)
        • est ce que tu as un oscilloscope pour voir si le signal est "propre"
        • est ce que tu as moyen d’acheter le PCB tout fait (http://arduino-info.wikispaces.com/...) histoire de savoir si tu n’as pas d’interference.

        Perso j’ai eu quelques difficultés avec le signal électrique avant d’avoir quelque chose qui marchait. (après ca allait plus facilement bizaremment)

        Répondre

        • Un TCO xpressnet 21 septembre 2016 09:54, par jerome savary

          Merci pour ta réponse Nicolas.

          > oui j’ai essayé d’inverser A et B : Rien ne change.
          > pas d’oscillo ( donc je "travail" a l’aveugle )
          > oui j’ai toujours cette solution...

          en lisant le lien, je comprends que la résistance entre A et B doit être de 120 ohms et que si elle est plus importante le signal ne passera pas bien.... j’ai bien compris ?
          c’est peut être là qu’est mon problème car je n’ai pas de résistance de 120 ohms mais une de valeur supérieure.

          to be continued.....

          Répondre

          • Un TCO xpressnet 22 septembre 2016 00:37, par jerome savary

            Bon voila, j’ai acheté des résistances 120 ohms et ça ne fonctionne toujours pas.

            Quelqu’un a t il fait fonctionner ce TCO ???? (hormis Nicolas bien sur)

            y’a t il une adaptation dans le fichier .ino a faire ( hormis les pin Id, trunout id et MYADDRESS ) ?

            HEEEEEELLLLLLLPPPPPP snif.. :-(

            @+
            Jerome.

            Répondre

  • Un TCO xpressnet 28 mai 2016 16:59, par Stefan Kummer

    Bonjour,

    Voilà, il y a une année j’avais commencé un projet de TCO xpressnet basé sur le code de Nicolas (merci beaucoup en passant pour le partage). J’avais réussi à recevoir et envoyer des paquets xpressnet. Aujourd’hui que je reprends mon code (j’ai enfin à nouveau du temps libre) j’obtient la réponse ’class HardwareSerial’ has no member named ’write9bit’ en compilant le code brut.
    Je cherche depuis un moment, mais ne trouve pas. Si quelqu’un a une piste ce serait sympa ;)
    J’ai bien mis les fichiers HardwareSerial.h/.cpp dans le rep adéquat. J’utilise le sdk 1.6.8

    Cordialement,
    Stefan

    Répondre

  • Un TCO xpressnet 28 mai 2016 19:17

    Salut,

    tu utilises bien un Arduino Mega ? car la fonction write9bit est bien dans le fichier HardwareSerial.h/cpp qu’il faut placer dans le bon répertoire. J’espere juste qu’ils n’ont pas changé la structure du code du SDK, et que ca soit dans un autre répertoire (par exemple).

    Fait peut etre une recherche de HardwareSerial.h dans le SDK voir ou ils sont placés.

    Répondre

    • Un TCO xpressnet 28 mai 2016 20:58, par Stefan Kummer

      Merci pour ta réponse rapide ;)
      Bon j’ai installé sdk 1.6.0 et ça passe... Désolé. Je ne suis pas assez qualifié en C pour y remédier.
      Par contre je travaille sur un réseaux piloté par interface Web, serveur mysql, raspberry et arduino. Je ne manquerai de vous préparer un article lorsque ce sera un peu fonctionnel...
      A+, stef

      Répondre

  • Un TCO xpressnet 28 mai 2016 19:18, par Nicolas Zin

    j’ai oublié de signer :-)

    Répondre

  • Un TCO xpressnet 30 janvier 2017 18:38, par Charles FAHRENHEIT

    Bonjour Nicolas,

    Je trouve votre TCO très intéressant.

    J’aurais cependant deux questions :

    1) que sont les cartes situées sous le couvercle sur lesquelles sont câblés les interrupteurs ? Dans la vidéo, vous dites précisément : "Le bouton qu’on a vu est branché sur ces p’tits machins là"...

    2) J’aimerais y ajouté une LED 3 couleurs sur chaque aiguille de façon à avoir la verte alimentée constament, et la rouge qui s’y ajoute lorsque l’aiguille est dévié, mais sans prendre l’information sur l’aiguille, mais juste sur la commande, par la centrale. Est-il possible d’ajouter un second arduino sur le bus Xpressnet ?

    Merci d’avance.

    Cordialement,

    Charles

    Répondre

  • Un TCO xpressnet 31 janvier 2017 03:13, par Nicolas Zin

    Bonjour Charles,

    je n’ai malheureusement plus les schema des petites cartes en question, mais faut que je regarde mon TCO pour revoir comment c’est fait, ca doit pas etre tres compliqué.

    Pour ton autre demande, oui il est possible d’ajouter d’autres "telecommandes" (je crois que le max est 16), mais je ne suis pas sur de comprendre : tu voudrais que le second arduino ecoute ce que le premier arduino "commande" et tu voudrais qu’il affiche en fonction des commandes envoyées ?
    Dans ce cas il va falloir que tu codes : il faut se plonger dans de datasheet xpressnet et decoder les packets xpressnet.

    tu ne voudrais pas plutot que le 2eme arduino ecoute sur le bus DCC plutot ? ca serait plus simple.

    PS : petit sondage : est ce que plusieurs d’entre vous voudraient que je me remette sur mon TCO pour vous produire un schema Eagle bien propre (i.e. comment cabler le RS485, et mettre le schema eagle sur le repository ?)

    Répondre

    • Un TCO xpressnet 31 janvier 2017 09:58, par Charles FAHRENHEIT

      Bonjour Nicolas et merci pour cette réponse rapide.

      Sur le principe, c’est ce que je pensais faire oui, un arduino donne des ordres à la centrale (DCC) et l’autre écoute cette même centrale.
      Mais il se trouve que, voulant m’équiper d’une centrale Lenz (SET100), le module LW150 (que je viens juste de découvrir, après avoir posté mon premier message...) fait exactement ce que je cherche, à savoir :

      • Si mon réseau est géré par un ordinateur, les LEDs sur le TCO s’activent quand même
      • Possibilité de piloter mon réseau "à la main" à l’aide de la télécommande et les poussoirs du TCO sans allumer l’ordinateur.

      Résultat : je n’utiliserai au final qu’un Arduino pour la géstion des éclairages et certains mouvements d’objets, le passage jour/nuit, etc...

      Merci encore.

      Cordialement,

      Charles

      Répondre

    • Un TCO xpressnet 2 mars 2017 11:27, par Jerome

      Réponse au sondage :
      oui moi cela m’intéresse grandement.
      Merci.
      Jerome.

      Répondre

  • Un TCO xpressnet 1er juin 2017 14:08, par Jerome SAVARY

    Bonjour tout le monde.

    n’etant pas sûr de mon montage electronique j’ai acheté un shield TTL to 485.

    branchement fait, je refait un essai.
    résultat : j’ai l’impression que la centrale discute bien avec le TCO (et inversement).
    en revanche je commence à avoir de serieux doutes sur la compatibilité des decodeur d’aiguillages ROCO 61196 et le TCO Xpressnet...
    en effet celui-ci réponds bien lorsqu’il est piloté par ma multimauss, mais ne fait rien lorsque je veux l’actionner via le TCO.

    Quelqu’un aurait la possibilité de tester ce montage avec ce décodeur d’aiguillage (ROCO 61196) ?

    Merci d’avance pour vos retours...

    Répondre

  • Un TCO xpressnet 17 septembre 2019 10:29, par Juan

    Bonjour, Nicolas.
    Tout d’abord, félicitations pour votre excellent montage.
    Le fait est que j’ai la centrale DCCpp de Thierry, sans XpressNet, et j’aimerais savoir s’il serait très compliqué d’adapter votre programme pour communiquer en série (X1, T1), ou par le bus I2C, c’est-à-dire sans Xpress Net.

    Je vous remercie beaucoup,
    Juan.

    Répondre

  • Un TCO xpressnet 17 septembre 2019 12:17, par Nicolas Zin

    Bonjour Juan,

    si tu n’as pas d’XpressNet, alors ca ne va pas etre simple : il faut comprendre comment tu peux communiquer avec ta centrale (DCCpp), et en particulier implémenter le protocole de communication qui va bien.
    Je ne connais pas DCCpp, donc je vais avoir du mal à répondre. Apparemment un PC communique avec, via USB, donc ca peut etre une option. (et il faut comprendre le protocole utilisé au dessus de l’USB). Si tu veux utiliser i2c, ca veut dire :

    • changer la base station pour qu’elle ecoute sur le port i2c
    • faire ton propre protocole
    • l’utiliser pour lui envoyer des commandes

    Ca me semble bien compliqué (au premier abord)

    Répondre

    • Un TCO xpressnet 18 septembre 2019 08:43, par Juan

      Bonjour, Nicolas.

      Oui, tu as raison, ça semble très compliqué, surtout pour moi !
      Merci quand même pour votre attention.
      Juan.

      Répondre

  • Un TCO xpressnet 23 décembre 2019 16:01, par Ril86

    Bonjour,
    Super tuto, simple et clair. Toutefois je rencontre un problème de compilation, j’obtiens le message suivant :

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:93:41: error: attempt to use poisoned "SIG_USART0_RECV"
    
     #if !defined(USART_RX_vect) && !defined(SIG_USART0_RECV) && \
    
                                             ^

    Je suis débutant en arduino donc je ne comprends pas le problème. Auriez-vous une idée.
    Merci

    Répondre

  • Un TCO xpressnet 23 décembre 2019 22:48, par msport

    Bonjour,
    le problème a déja été traité le 21 février 2015 14:02, par Jean-Luc.
    Voir ci-dessus.

    Répondre

  • Un TCO xpressnet 16 mars 2020 16:21, par demeure

    voila se qui me mais quand je compile sur ma carte arduino aTmega 2560 et un max 485 TTL,Bibliothèque non valide trouvée dans C :\Users\Documents\Arduino\libraries\variants : aucun fichier d’en-tête (.h) trouvé dans C :\Users\Documents\Arduino\libraries\variants.

    Répondre

  • Un TCO xpressnet 21 avril 2020 11:55, par Chevriot Jean-Paul

    bonjour,
    Je commence avec arduino, j’ai déjà pu réaliser certaines choses et je voudrais faire ce TCO pour gèrer mes aiguilles commandées en DCC par la souris.
    je n’arrive pas à aller dans le répertoire arduinoSdk pour récupérer les fichiers HardwareSerial.h et HardwareSerial.cpp ;

    Pouvez-vous m’aider

    Merci d’avance

    Répondre

  • Un TCO xpressnet 25 avril 2020 07:41, par Nicolas

    Bonjour,

    comme dit par email, je sais ou ca se trouve sur Mac. Pour Windows, je ne suis pas sur.
    Est ce que tu pourrais faire une recherche sur ton disque, savoir ou ca se trouve ?
    Peut etre dans C :\Program Files\Arduino ?

    Répondre

    • Un TCO xpressnet 25 avril 2020 10:42, par Jean-Paul CHEVRIOT

      Bonjour et merci du renseignement,

      j’ai recherché sur le disque dur et après avoir pratiquement tout regardé, je n’ai pas trouvé le répertoire arduinoSdk mais par contre les fichiers HardwareSerial.h et HardwareSerial.cpp y étaient.
      C’est ce que je recherchais.

      Merci encore

      J.P. CHEVRIOT

      Répondre

  • Un TCO xpressnet 25 avril 2020 11:17, par msport

    Les fichiers sont dans C :\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino
    Mais le répertoire arduinoSdk est à récupérer dans le dépot.

    Répondre

    • Un TCO xpressnet 27 avril 2020 10:41, par Jean-Paul CHEVRIOT

      J’ai bien trouvé les fichiers mais je n’arrive pas à trouver le dépot pour récupérer arduinoSdk.

      Je suis donc coincé et j’ai passé beaucoup de temps inutile en recherches stériles.

      Merci pour votre aide.

      Cordialement
      J.P. CHEVRIOT

      Répondre

  • Un TCO xpressnet 27 avril 2020 11:47, par msport

    Voir sur le forum.
    Cliquez sur le lien ci-dessous en bleu ciel.

    Voir en ligne : récupérer dans mon dépôt

    Répondre

  • Un TCO xpressnet 1er novembre 2020 12:03, par martin jean-claude

    bonjour
    je suis un débutant avec arduino mega 2560 et en installant les fichiers hardware serial j’ai se qui suit
    HardwareSerial::HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
    pouvez vous m’aider

    Répondre

  • Un TCO xpressnet 1er novembre 2020 15:28, par Dominique

    Question très incomplète pour localiser le problème !

    Répondre

  • Un TCO xpressnet compatible loconet ? 6 février 2021 21:38, par Pierard Ludovic

    Bonjour,

    je voulais savoir si ce TCO est compatible avec le loconet.

    Répondre

  • Un TCO xpressnet 6 février 2021 22:28, par Nicolas Zin

    Non, ce TCO n’est pas compatible avec Loconet.
    Xpressnet et Loconet sont des 2 "standards" incompatibles

    Répondre

  • Un TCO xpressnet 26 décembre 2022 16:19, par Jean-Paul

    Ça existe en version loconet ici
    https://m.youtube.com/watch?v=r6l4I...

    Voir en ligne : LnControlPanel

    Répondre

  • Un TCO xpressnet 1er avril 2023 19:34, par Richard TRELA

    Bonsoir à tous,
    J’arrive sur ce forum comme un chien dans un jeu de quilles, et je découvre que beaucoup d’internautes ont des problèmes pour faire fonctionner leur TCO. Et bien je suis dans le même cas !!!
    J’ai tout vérifié, le câblage le programme et malgré tout j’ai le code 255 en DCC !!!
    DocMarco que j’ai consulté ne comprend pas ; l’Arduino Mega enregistre bien les modification des inter à levier mais il n’y a pas de connexion avec la centrale !!! c’est une Lentz LZV200.
    Si quelqu’un peu me trouver une solution ou une indication à suivre je suis preneur.
    Je remercie par avance toutes les bonne volontés.

    Répondre

  • Un TCO xpressnet 2 avril 2023 03:02, par Nicolas Zin

    Dans mon cas, j’ai trouvé le chip RS485 difficile à faire fonctionner correctement. Peut etre ma façon d’intégrer le chip qui est mauvaise. Comme je ne suis pas un expert en électronique...

    Répondre

  • Un TCO xpressnet 9 mai 2023 13:20, par pierre

    Bonjour,

    Il semble que ce TCO ne fonctionne pas avec la DR5000 de Dijikeijs.

    Avez-vous essayé, possédez vous des éléments de réponse.

    Cordialement

    Répondre

  • Un TCO xpressnet 25 janvier 11:06, par BB22210

    Bonjour,
    Voilà exactement ce que je cherchais et je vous remercie pour ce tuto !
    J’ai tenté de compiler le code avec une version 1.8.3 de l’IDE, malheureusement j’ai rencontré les erreurs relatives aux vecteurs. J’ai bien importé les 2 fichiers .h et .cpp comme mentionné et replacé les chaines UARTx_RX_vect dans le code, la compilation passe désormais. Ces deux fichiers .h et .cpp sont malgré tout une régression par rapport aux fichiers .h et .cpp livrés en version 1.8.3. Il y aura t’il un upgrade du code du TCO pour être qu’il soit compatible avec la version 1.8.x de l’IDE ?
    Merci pur votre réponse.

    Répondre

  • Un TCO xpressnet 23 février 00:52, par BB22210

    Bonjour, je reviens vers vous car je tente d’avancer sur la compilation du prog tco xpressnet mais je rencontre ces messsages d’erreur lors de la compilation :

    HardwareSerial.cpp.o (symbol from plugin) : In function HardwareSerial::available()': (.text+0x0): multiple definition of__vector_36’
    libraries\XpressNet\XpressNet.cpp.o (symbol from plugin) :(.text+0x0) : first defined here
    collect2.exe : error : ld returned 1 exit status
    exit status 1
    Error compiling for board Arduino Mega or Mega 2560.
    Votre aide serait appréciée
    Merci

    Répondre

Réagissez à « Un TCO xpressnet »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Les derniers articles

Les articles les plus lus