Bibliothèque DCCpp
Encore un DCC++ ? Mais à quoi ça sert ?
. Par : Thierry
Vous répondez à :
Tu as raison pour les deux fichiers, mais je dois m’attaquer à la version ESP32 incessamment, je vais les laisser en attendant. J’ai ajouté des arguments à powerOn() et powerOff() pour couper/restaurer le courant sur les deux voies séparément. Mais en fait c’est une vraie gestion de boosters qu’il faudrait, avec une classe dédiée qui s’occuperai de la gestion du courant. En attendant, j’ai fait une version spécifique de la classe CurrentMonitor pour mieux gérer les court-circuits indépendamment. Cette version permettrai aussi d’ajouter des moniteurs sur chaque booster :
/********************************************************************** CurrentMonitor.h COPYRIGHT (c) 2013-2016 Gregg E. Berman Part of DCC BASE STATION for the Arduino **********************************************************************/ #ifdef ARDUINO_ARCH_AVR #ifndef CurrentMonitor_h #define CurrentMonitor_h /** Factor to smooth the result...*/ #define CURRENT_SAMPLE_SMOOTHING 0.01 /** Time between two measurements. @remark Millis() uses TIMER-0. For UNO, we change the scale on Timer-0. For MEGA we do not. This means CURRENT_SAMPLE_TIME is different for UNO then MEGA. */ #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO) // Configuration for UNO #define CURRENT_SAMPLE_TIME 10 #else // Configuration for MEGA #define CURRENT_SAMPLE_TIME 1 #endif /** This structure/class describes a current monitor.*/ struct CurrentMonitor{ static long int sampleTime; /**< time elapsed since last measurement. This delay is common to all monitors. */ int pin; /**< Attached check pin.*/ int signalPin; /**< signal pin.*/ float currentSampleMax; /**< Value of the maximum current accepted without problem.*/ float current; /**< Value of the last measured current.*/ const char *msg; /**< Message to send when excessive current is measured.*/ /** begin function. @param pin Attached pin. UNEFINED_PIN to inactivate this monitor. @param inSignalPin Pin to set LOW if a shortcut is detectexd. @param msg Message to send to console when a smoothed current value greater than maximum is detected. @param inSampleMax Maximum value of the current. Default is 300. */ void begin(int pin, int inSignalPin, const char *msg, float inSampleMax = 300); /** Checks if sufficient time has elapsed since last update. Common to all monitors. */ static boolean checkTime(); /** Checks the current on this monitor. */ void check(); }; #endif #endif
Noter le signalPin apparu dans la classe et le begin(), qui correspond à la broche à mettre à LOW si un problème intervient. Et
/********************************************************************** CurrentMonitor.cpp COPYRIGHT (c) 2013-2016 Gregg E. Berman Part of DCC BASE STATION for the Arduino **********************************************************************/ #include "Arduino.h" #ifdef ARDUINO_ARCH_AVR #include "DCCpp_Uno.h" #include "CurrentMonitor.h" #include "Comm.h" /////////////////////////////////////////////////////////////////////////////// void CurrentMonitor::begin(int pin, int inSignalPin, const char *msg, float inSampleMax) { this->pin = pin; this->signalPin = inSignalPin; this->msg = msg; this->current = 0; this->currentSampleMax = inSampleMax; } // CurrentMonitor::begin boolean CurrentMonitor::checkTime() { return(false); sampleTime = millis(); // note millis() uses TIMER-0. For UNO, we change the scale on Timer-0. For MEGA we do not. This means CURENT_SAMPLE_TIME is different for UNO then MEGA return(true); } // CurrentMonitor::checkTime void CurrentMonitor::check() { if (this->pin == UNDEFINED_PIN) return; this->current = (float)(analogRead(this->pin) * CURRENT_SAMPLE_SMOOTHING + this->current * (1.0 - CURRENT_SAMPLE_SMOOTHING)); // compute new exponentially-smoothed current // current overload and Programming Signal is on (or could have checked Main Signal, since both are always on or off together) { DCCPP_INTERFACE.print(this->msg); // print corresponding error message #if !defined(USE_ETHERNET) DCCPP_INTERFACE.println(""); #endif } } // CurrentMonitor::check long int CurrentMonitor::sampleTime=0; #endif
Noter la fonction check() qui utilise maintenant cette signalPin pour couper le courant. Il faut aussi modifier DCCpp.cpp pour ajouter l’argument manquant du begin.
void DCCpp::beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnable, uint8_t inCurrentMonitor) { ... mainMonitor.begin(DCCppConfig::CurrentMonitorMain, DCCppConfig::SignalEnablePinMain, (char *) "<p2>"); ... } void DCCpp::beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnable, uint8_t inCurrentMonitor) { ... progMonitor.begin(DCCppConfig::CurrentMonitorProg, DCCppConfig::SignalEnablePinProg, (char *) "<p3>"); ... } void DCCpp::begin() { ... mainMonitor.begin(UNDEFINED_PIN, UNDEFINED_PIN, ""); progMonitor.begin(UNDEFINED_PIN, UNDEFINED_PIN, ""); ... }
Ajouter des boosters reviendrait à ajouter de nouvelles instances de la classe avec les pins qui vont bien pour couper le courant juste chez eux si un problème survient.
Je n’ai pas poussé ces modifications dans la bibliothèque officielle d’aujourd’hui parce que je n’ai pas pu tester. Si tu peux le faire, dis moi si ça marche…
75 Messages
-
Bibliothèque DCCpp 26 décembre 2017 10:25, par bagou91
Merci pour cet article et la présentation de cette bibliothèque.
Après lecture, j’ai l’impression que cela va être bien plus simple à utiliser pour se concevoir un circuit avec quelques accessoires et locos.
Jusqu’à présent j’ai essayé plusieurs bibliothèques proposées : d’un coté les accessoires, d’un autre le contrôle des locos, mais sans vraiment pouvoir tout réunir.
Avec cette bibliothèque, je crois que c’est chose faite :
Les quelques exemples donnés montrent la gestion d’accessoires en même temps que le contrôle des locos.Plus qu’à mettre en pratique :)
-
Bibliothèque DCCpp 31 décembre 2017 18:35, par BobyAndCo
Ma petite contribution à ce formidable travail. J’ai pu tester la bibliothèque de Thierry en mode TEXTCOMMAND, en Ethernet avec le LMD18200 et aussi le POLOLU MC33926 Motor shield.
Je n’ai rencontré aucun problème, que ce soit en pilotage sur la voie Main ou en programmation, sur la voie Prog avec l’une et l’autre des cartes moteur.
Il ne faut pas oublier de modifier le fichier DCCpp comme cela est indiqué dans l’article (lignes 310 et 312 à décommenter)
- /**Comment this line to avoid using and compiling Serial commands.*/
- #define USE_TEXTCOMMAND
- /**Comment this line to avoid using and compiling Ethernet shield using Wiznet 5100 chip (Arduino Shield v1).*/
- #define USE_ETHERNET_WIZNET_5100
mais vous serrez rapidement rappelé à l’ordre en cas d’oubli au moment où vous chercherez à téléverser le programme sur l’Arduino.
Pour cela, dans le menu Exemples de l’IDE d’Arduino, on choisit EthernetDCC. Si vous utilisez un LMD18200, vous n’aurez rien à modifier, sauf une petite erreur qui est juste dans l’exemple (pas dans l’article). Sur la voie Main, la broche pour le PWM est la 3 et non la 11 (la 11 étant celle de la voie Prog)
Voici le code modifié et complété :
- // Configuration for my LMD18200. See the page 'Configuration lines' in the documentation for other samples.
- DCCpp::beginMain(UNDEFINED_PIN, DCC_SIGNAL_PIN_MAIN, 3, A0);
- DCCpp::beginProg(UNDEFINED_PIN, DCC_SIGNAL_PIN_PROG, 11, A1);
En cas d’utilisation d’un Pololu, le code à ajouter est celui-ci :
- // Configuration for my POLOLU MC33926 Motor shield.
- DCCpp::beginMain(POLOLU_DIRECTION_MOTOR_CHANNEL_PIN_A, DCC_SIGNAL_PIN_MAIN, POLOLU_SIGNAL_ENABLE_PIN_MAIN, POLOLU_CURRENT_MONITOR_PIN_MAIN);
- DCCpp::beginProg(POLOLU_DIRECTION_MOTOR_CHANNEL_PIN_B, DCC_SIGNAL_PIN_PROG, POLOLU_SIGNAL_ENABLE_PIN_PROG, POLOLU_CURRENT_MONITOR_PIN_PROG);
Bravo encore.
Christophe
-
Bibliothèque DCCpp 2 janvier 2018 11:13, par DDEFF
Magnifique travail !
’
Je n’ai malheureusement pas encore de réseau, mais il est évident qu’il sera commandé avec cette bibliothèque.
.
Pour l’avoir découvert la première fois, j’avais bien saisi le potentiel de l’appli de Greg, qui mêlait le C++ pour l’Arduino et Processing pour l’interface de commande des trains.
.
L’interface Processing était efficace, mais uniquement adaptée à son réseau, vraiment spécifique. L’adapter à un autre réseau est complexe.
Mais elle permet d’envoyer à l’Arduino des commandes simples qui respectent parfaitement les normes DCC.
Il s’ensuit qu’on peut déconnecter la partie Arduino et la partie Processing. C’est ce qui a déjà été fait dans les très bons articles de Dominique et Christophe qui ajoutent chacun une fonctionnalité.
.
Tu ajoutes une idée force supplémentaire en créant une bibliothèque qui permet de ne plus se soucier d’avoir à intervenir directement dans le programme.
.
Un grand bravo ! -
Bibliothèque DCCpp 2 janvier 2018 21:57, par Thierry
Merci pour votre soutien. Il reste des pistes d’amélioration, comme la disponibilité pour un ESP32, un ESP8266 ou un STM32. Et puis l’accès aux commandes via Wifi… Encore du boulot !
-
Bibliothèque DCCpp installation 5 janvier 2018 00:40, par Rob1
Une petite question de débutant pour enfin m’associer aux remerciements et félicitations.
Les sources à utiliser sont-elles celles que l’on trouve dans
Biblios et Logiciels DCC + BaseStation-master + DCCpp_Uno
J’hésite car il n’y a pas DCCpp.h Si oui doit-on le créer au même niveau que DCCpp_UnoRob1.ino ?
Peut-être ai-je raté un lien dans l’article.Merci d’avance pour votre aide
-
Bonjour, merci de l’intérêt porté à mon travail. Comme indiqué dans l’article (dans le chapitre "Où ça se passe…", mais je reconnais que ce n’est pas très visible…), la bibliothèque est ici (https://github.com/Locoduino/DCCpp/blob/master/DCCpp.zip) et se suffit à elle même.
-
Je crois qu’il est temps de mettre à jour les articles sur le DCC en pointant maintenant sur la bibliothèque DCCpp de Thierry qui simplifie considérablement le travail du développeur.
Cela n’enlève rien à l’intérêt de l’article Réalisation de centrales DCC avec le logiciel libre DCC++ qui explique les entrailles de DCC++ qui reste à l’identique dans la bibliothèque de DCCpp.
-
Merci de cette prompte réponse. Une lecture plus attentive aurai éviter la question mais je suis comme le temps, tous les jours un peu "plus vieux".
-
-
-
Bibliothèque DCCpp 6 février 2018 18:52, par pat95
Bonjour, bravo pour le travail réalisé je m’associe aux félicitations.
Je n’arrive pas à faire fonctionner la nouvelle bibliothèque avec mon ancien dossier DCC_Ethernet de BobyAnco !!
j’ai réussi avec la liaison SERIAl mais rien avec l’exemple ethernet. Est-ce le dossier HTML sur la carte SD qui bloque ? Faut-il reprogrammer un nouveau fichier HTML ? Merci d’avance pour votre aide. -
Bibliothèque DCCpp 6 février 2018 20:40
Bonjour et merci.
Avez vous fait ce qu’il faut dans DCCpp pour gérer une liaison Ethernet, c’est à dire activé USE_TEXTCOMMAND et l’un des shields réseau avec USE_ETHERNET_* ?
Quel fichier ino employez vous ?Le fichier HTML n’y est pour rien, il s’agit beaucoup plus probablement d’une absence de connexion au réseau…
-
Bibliothèque DCCpp 7 février 2018 13:12, par pat95
Bonjour,
j’ai fait fonctionné l’exemple SerialDcc sans problème. Je crois que mon problème est de lire sur la carte SD le fichier "control.htm" fichier en HTML. Comment faire ?. Je cherche…
-
-
Bibliothèque DCCpp 7 février 2018 14:07, par pat95
Bonjour,
j’ai testé l’exemple serialDcc sans problème. J’ai ensuite chargé l’exemple EthernetDcc, modifié mac[], activé #define USE_TEXTCOMMAND, sélectionné #define USE_ETHERNET_WIZNET_5500 (arduino.org, ethernet2), modifié DCCpp::beginMain(UNDEFINED_PIN, DCC_SIGNAL_PIN_MAIN, 3, A0) ;. Et rien… Rien sur la console pas même la connexion ethernet !!. Je continue à chercher. -
Bibliothèque DCCpp 26 février 2018 17:10, par Didier44
Je découvre seulement tes bibliothèques, occupé par ailleurs par la construction de mon réseau. Un seul mot : bravo. Je viens d’essayer ton exemple Autotest et ton mini "programmateur" me donne bien des idées.
-
Bibliothèque DCCpp 3 mars 2018 13:27, par Jocelyn DAVID
Bonjour, je viens de télécharger la dernière version DCCpp-1.1.0 et je ne suis pas capable d’afficher le fichier DCCpp.h pour le modifier. Je suis allé voir sur le forum sans trouver l’astuce. Soit je suis (assez ?) nul, soit c’est bien caché. Merci pour votre retour
-
Bibliothèque DCCpp 3 mars 2018 15:44, par Thierry
Bonjour
Si vous avez installé correctement la bibliothèque comme expliqué dans l’article Installer une bibliothèque , vous avez un répertoire ’Libraries/DCCpp/src’ à côté de vos croquis Arduino (dans ’Mes documents/Arduino’ sous Windows) . Vous y trouverez le fichier en question. Si vous n’avez que téléchargé le fichier zip, il vous faut installer la bibliothèque.
-
Bibliothèque DCCpp 3 mars 2018 16:58, par Jocelyn DAVID
Merci, Thierry. J’ai effectivement trouvé après coup le fichier dans le sous-répertoire "src". L’aventure continue … Pas facile de se remettre à niveau après 20 ans d’interruption (sans jeu de mots)… aha
-
-
Bibliothèque DCCpp 6 mars 2018 11:17, par Jocelyn DAVID
Bonjour à tous les lecteurs. Ma quête laborieuse se poursuit. J’ai quelques questions complémentaires. J’ai fait l’acquisition de 2 locos "N" Bachmann avec "DCC on board". Jusque là, pas de soucis (sauf si quelqu’un a rencontré des problèmes avec ce matériel ?). Par défaut, l’adresse du décodeur est "3". En faisant fonctionner mon Arduino Uno + LMD18200 + MAX471 avec une seule loco sur la voie principale et avec la bibliothèque CmdrArduino, aucun problème. J’ai donc testé la bibliothèque DCCpp … puis DCC++ BaseStation, rien ne va plus. Par exemple, le mode TEXTE ne produit aucune réaction. Est-ce que quelqu’un a une idée du problème ? merci pour votre retour.
-
Bibliothèque DCCpp 6 mars 2018 12:02, par Thierry
Bonjour
Qu’entends-tu par ’mode TEXTE’ ? si c’est l’utilisation de la console pour envoyer des commande, il suffit de l’activer dans DCCpp (maintenant que tu as trouvé le fichier :) ) en retirant la remarque devant #define USE_TEXTCOMMAND.
-
-
Bibliothèque DCCpp 7 mars 2018 21:00, par Guillaume45
Tout d’abord un très grand merci pour tout ce travail magnifique que vous nous donner et vraiment bravo !!!
J’ai rencontré un petit problème avec la bibliothèque DCCpp et la dernière version de l’ide arduino.
erreur de compilation #include "arduino.h" manquant.
j’ai réussi à résoudre ce problème en remplaçant "arduino.h" par "Arduino.h" dans le fichier source DCCpp.cpp et Config.h .Je cherche à commander mes trains en utilisant la fonction DCCpp::setSpeedMain(……)
A quoi le paramètre nreg ou registre et comment faire pour piloter plusieurs locomotive simultanément ?
Lorsque l’on ne veut plus commander une loc, existe -t-il une fonction pour faire un raz ?Merci pour votre aide
Guillaume -
Bibliothèque DCCpp 8 mars 2018 09:34, par Thierry.
Bonjour et merci :)
Je vais corriger les includes et pousser une nouvelle version. Le problème vient de mon Windows qui n’est pas sensible à la casse des noms de fichiers. Alors quand c’est compilé sur un MacOs ou un Linux, il peut y avoir des problèmes que je n’ai pas vu…
Comme je l’explique dans la doc livrée avec la bibliothèque (sous Windows lancer startdoc.bat du répertoire de la bibliothèque, sinon lancer le fichier html DCCpp\extras\Doc\index.html dans un navigateur), chaque registre est un canal de commande DCC. Conformément à la norme, les ordres DCC doivent être répétés à l’infini pour qu’une loco qui perd le contact électrique avec la voie pendant une milliseconde retrouve sa consigne dès que le contact est rétabli. Chaque registre contient donc un ordre à répéter. On peut jongler avec les onze registres en répétant onze ordres pour la même loco, ou en pilotant onze locos, ou en mixant les deux…
Et non, il n’y a pas de Raz dans DCCpp, mais des commandes similaires existent dans la norme DCC. -
Bibliothèque DCCpp 2 avril 2018 09:03, par Guillaume45
Bonjour,
J’apprends à utiliser votre bibliothèque depuis quelques semaines, et je ne rencontre aucune difficulté pour la commande des locomotives.
Par contre pour la lecture des CV sur voie de prog, c’est un peu plus compliqué.
la fonction "identifyLocoIdProg" me donne bien la bonne valeur.
l’écriture cv prog à bien fonctionné aussi ( j’ai juste reprogrammé l’adresse)
mais la lecture cv "readCvProg" me retourne toujours -1.
y a t’il une particularité pour l’utilisation de cette fonction ?
(pour info j’utilise 2 lmd18200 avec max471)Merci pour votre aide
Guillaume -
Bibliothèque DCCpp 2 avril 2018 10:05, par Thierry
Bonjour
Content de voir que ça marche ! Pour la lecture des CVs, il y a un petite incohérence dans mon code qui fait que la lecture de l’adresse ne peut fonctionner que sur la voie principale, tandis que la lecture de CV peut se faire sur les deux voies…
Si votre décodeur est sur la voie principale, cela peut expliquer le fonctionnement que vous décrivez. L’adresse est bien lue, mais readCvProg ne peut pas fonctionner… Si votre loco avait été sur la voie de programmation, la lecture de l’adresse aurait échoué, mais la lecture des CV aurait réussi !
Je ferais très bientôt une nouvelle version corrigeant ce disfonctionnement…Thierry.
-
Bibliothèque DCCpp 28 novembre 2018 18:22, par engi
bonjour
j ai lu plusieurs fois l article, mais quelquechose m echappe.
je ne trouve pas le fichier INO ou PDE.
merci de m eclairer.-
Bibliothèque DCCpp 28 novembre 2018 18:48, par Dominique
C’est normal, c’est une bibliothèque : Une bibliothèque est un ensemble de fonctions qui s’ajoutent aux fonctions de base du logiciel de l’Arduino.
Donc le .ino est dans votre programme, pas dans le bibliothèque.
Lisez donc Installer une bibliothèque -
Bibliothèque DCCpp 29 novembre 2018 09:13, par Thierry
Comme le dit Dominique, c’est une bibliothèque, donc dans les exemples se trouvent des … exemples, donc des fichiers ino permettant de se servir de DCCpp.
Bonne programmation !
-
-
Bibliothèque DCCpp 26 janvier 17:29, par Philippe38
Bonjour Thierry,
J’utilise la bibio DCCpp avec succès depuis +6 mois. Je la commande à partir d’un GUI/IHM écrit en JavaScript avec node.js. J’ai relu la doc mais je vois pas comment programmer des CV dans les décodeurs d’accessoires en dehors de la voie de programmation. Je souhaiterai programmer en POM comme pour les décodeurs de loco. Il me semble qu’il manque une commande pour y arriver ? Tout ça pour un bit : loco ou accessoire.
Ferroviairement, Philippe38-
Bibliothèque DCCpp 1er février 15:54, par Thierry
Bonjour Philippe,
De quel bit parles tu ? Je ne le retrouve pas dans le document NMRA sur la norme DCC…
-
Bibliothèque DCCpp 1er février 18:20, par Philippe38
Bonjour Thierry,
J’explique en détail : je souhaiterai programmer les CV de mes modules accessoires en POM. Mais l’adresse des accessoires (1..2048) est la même que celles des locos (1..10240). La différence d’adressage entre loco et accessoire est gérée en interne par DCCpp avec le début de l’octet 1 de la trame DCC : 0x.. = loco adresse courte, 11.. = loco adresse longue, 10.. = accessoire. Ca tient à un bit qui fait la différence.
Comment programmer un accessoire en POM ? Il manque une commande dans TextCommand.h me semble-t-il. Est que c’est envisageable de rajouter une commande ? "A" est libre par exemple. J’ai regardé le code en profondeur mais cela ne parait pas très simple…
Merci pour la bibliothèque, un sacré boulot.
Ferroviairement, Philippe38
-
-
-
Bibliothèque DCCpp 2 février 13:35, par Thierry
Je pourrais faire les fonctions en question, mais je ne pourrais pas tester, et en particulier je ne pourrais pas tester la partie remontée d’information via une consommation ponctuelle comme le prévoit le protocole DCC, en tout cas pour les décodeurs de machine…
-
Bibliothèque DCCpp 2 février 23:53, par Philippe38
Bonsoir Thierry,
mes décodeurs d’accessoires (de Paco et Arduino) ne permettent pas la lecture des CV comme beaucoup d’autres, que ce soit en POM ou en voie de programmation. D’ailleurs on ne peut relire les locos que sur la voie de programmation, donc il faut s’en contenter. Pour le test, utilisons un analyseur de trame sur Arduino qui monitore tout ce qui passe en DCC. La fonction programmation des CV accessoires en POM reste intéressante si cela ne demande pas un trop gros effort d’écriture. On pourrait se limiter de 512 accessoires pour simplifier. Voir la page Internet de mon ami Michel. Par comparaison avec une trame loco, dans la trame 6 octets pour 512 accessoires, un bit change dans l’octet 1 et seul l’octet 2 est différent, les autres sont identiques. Par contre je ne connais pas la trame 2048 accessoires.
Ferroviairement, Philippe38Voir en ligne : PROGRAMMATION de 510 DÉCODEURS
-
-
Bibliothèque DCCpp 13 mars 14:54, par dlal
Bonjour à tous,
J ai juste commencé à utiliser cette bibliothèque, avec le premier example autotest, tout était comme prévu. Dans le seconde example, minidcc, je reçois erreur 1 durant la compilation carte mega’.La seule chose sue j ai changé était l adresse de la loco, 13 au lieu de 3…..
Merci pour votre réponses -
Bibliothèque DCCpp 13 mars 15:33, par Thierry
Bonjour
Pouvez vous préciser la nature de l’erreur ? Pendant la compilation, ou l’envoi vers le Mega ? A quelle ligne ? Tout ça est dit dans la fenêtre du bas de l’IDE… Sinon je ne peux pas faire grand chose avec juste un ’Ça marche pas !’…
-
Bibliothèque DCCpp 13 mars 16:00, par dlal
Bonjour Thierry, merci pour votre réponse. L erreur apparaît pendant la premiere phase de vérification ( notée par v sur arduino).le message exact que je reçois est apparu à la fenetre en bas, est
exit status 1
, erreur pendant la compilation pour la carte arduino mega.
Merci pour encore une fois.
Denis-
Bibliothèque DCCpp 13 mars 17:26, par Jean-Luc
Les informations pertinentes sont autour de ce
exit status 1
. Pouvez vous copier-coller tout ce qui est affiché en rouge en cliquant sur le bouton « Recopier les messages d’erreur » ? -
Bibliothèque DCCpp 13 mars 17:31, par Thierry
Ce que vous me dites ne me sert à rien, c’est tout le reste du texte qui est utile…. Bref si vous compilez comme je le crois, vous devez avoir un texte qui ressemble à
Arduino : 1.8.7 (Windows 10), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
MiniDcc:7:24 : error : Commanders.h : No such file or directory
compilation terminated.
exit status 1
Commanders.h : No such file or directory"No such file or directory" signifie qu’il vous manque un fichier, ici Commanders.h, ce qui est probablement le cas si vous n’avez pas installé la bibliothèque Commanders utilisée dans cet exemple. C’est ce que je dis dans l’article associé à DCCpp que je vous enjoins de lire attentivement.
-
-
Bibliothèque DCCpp 13 mars 17:34, par dlal
Bonsoir Thierry,
Voila ce que je recoie,
merci ,
Denis
Arduino:1.8.8 (Windows 10), Scheda :"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"In file included from C :\Users\anton\Documents\Arduino\MiniDcc\MiniDcc.ino:7:0 :
C :\Users\anton\Documents\Arduino\libraries\Commanders\src/Commanders.h:470:18 : fatal error : DIO2.h : No such file or directory
compilation terminated.
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Mega or Mega 2560.Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni" -
Bibliothèque DCCpp 13 mars 17:41, par dlal
merci Thierry,resolu il manque DIO2
Denis -
Bibliothèque DCCpp 24 avril 22:28, par Philippe38
Hi Trusty,
Tu as laissé trainer 2 fichiers de chez Atani dans DCCpp.zip. Ils n’ont rien à faire là, je croyais que j’avais déplacé ces fichiers par erreur mais ils sont bien dans ton zip. Est ce qu’il est envisageable de séparer la gestion du courant entre Main et Prog pour éviter de couper inutilement la voie de programmation en cas de court-circuit sur Main ? Dans le même esprit, je souhaiterai ajouter 3 boosters contrôlés indépendamment mais je n’ose pas modifier le soft parce je ne le connais pas assez bien. Et il me faudrait le modifier à chaque release.
Ferroviairement, Philippe38-
Tu as raison pour les deux fichiers, mais je dois m’attaquer à la version ESP32 incessamment, je vais les laisser en attendant. J’ai ajouté des arguments à powerOn() et powerOff() pour couper/restaurer le courant sur les deux voies séparément. Mais en fait c’est une vraie gestion de boosters qu’il faudrait, avec une classe dédiée qui s’occuperai de la gestion du courant. En attendant, j’ai fait une version spécifique de la classe CurrentMonitor pour mieux gérer les court-circuits indépendamment. Cette version permettrai aussi d’ajouter des moniteurs sur chaque booster :
- /**********************************************************************
- CurrentMonitor.h
- COPYRIGHT (c) 2013-2016 Gregg E. Berman
- Part of DCC BASE STATION for the Arduino
- **********************************************************************/
- #ifdef ARDUINO_ARCH_AVR
- #ifndef CurrentMonitor_h
- #define CurrentMonitor_h
- /** Factor to smooth the result...*/
- #define CURRENT_SAMPLE_SMOOTHING 0.01
- /** Time between two measurements.
- @remark Millis() uses TIMER-0. For UNO, we change the scale on Timer-0. For MEGA we do not. This means CURRENT_SAMPLE_TIME is different for UNO then MEGA.
- */
- #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO) // Configuration for UNO
- #define CURRENT_SAMPLE_TIME 10
- #else // Configuration for MEGA
- #define CURRENT_SAMPLE_TIME 1
- #endif
- /** This structure/class describes a current monitor.*/
- struct CurrentMonitor{
- static long int sampleTime; /**< time elapsed since last measurement. This delay is common to all monitors. */
- int pin; /**< Attached check pin.*/
- int signalPin; /**< signal pin.*/
- float currentSampleMax; /**< Value of the maximum current accepted without problem.*/
- float current; /**< Value of the last measured current.*/
- const char *msg; /**< Message to send when excessive current is measured.*/
- /** begin function.
- @param pin Attached pin. UNEFINED_PIN to inactivate this monitor.
- @param inSignalPin Pin to set LOW if a shortcut is detectexd.
- @param msg Message to send to console when a smoothed current value greater than maximum is detected.
- @param inSampleMax Maximum value of the current. Default is 300.
- */
- void begin(int pin, int inSignalPin, const char *msg, float inSampleMax = 300);
- /** Checks if sufficient time has elapsed since last update. Common to all monitors.
- */
- static boolean checkTime();
- /** Checks the current on this monitor.
- */
- void check();
- };
- #endif
- #endif
Noter le signalPin apparu dans la classe et le begin(), qui correspond à la broche à mettre à LOW si un problème intervient. Et
- /**********************************************************************
- CurrentMonitor.cpp
- COPYRIGHT (c) 2013-2016 Gregg E. Berman
- Part of DCC BASE STATION for the Arduino
- **********************************************************************/
- #include "Arduino.h"
- #ifdef ARDUINO_ARCH_AVR
- #include "DCCpp_Uno.h"
- #include "CurrentMonitor.h"
- #include "Comm.h"
- ///////////////////////////////////////////////////////////////////////////////
- void CurrentMonitor::begin(int pin, int inSignalPin, const char *msg, float inSampleMax)
- {
- this->pin = pin;
- this->signalPin = inSignalPin;
- this->msg = msg;
- this->current = 0;
- this->currentSampleMax = inSampleMax;
- } // CurrentMonitor::begin
- boolean CurrentMonitor::checkTime()
- {
- return(false);
- sampleTime = millis(); // note millis() uses TIMER-0. For UNO, we change the scale on Timer-0. For MEGA we do not. This means CURENT_SAMPLE_TIME is different for UNO then MEGA
- return(true);
- } // CurrentMonitor::checkTime
- void CurrentMonitor::check()
- {
- if (this->pin == UNDEFINED_PIN)
- return;
- this->current = (float)(analogRead(this->pin) * CURRENT_SAMPLE_SMOOTHING + this->current * (1.0 - CURRENT_SAMPLE_SMOOTHING)); // compute new exponentially-smoothed current
- // current overload and Programming Signal is on (or could have checked Main Signal, since both are always on or off together)
- {
- DCCPP_INTERFACE.print(this->msg); // print corresponding error message
- #if !defined(USE_ETHERNET)
- DCCPP_INTERFACE.println("");
- #endif
- }
- } // CurrentMonitor::check
- long int CurrentMonitor::sampleTime=0;
- #endif
Noter la fonction check() qui utilise maintenant cette signalPin pour couper le courant. Il faut aussi modifier DCCpp.cpp pour ajouter l’argument manquant du begin.
- void DCCpp::beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnable, uint8_t inCurrentMonitor)
- {
- ...
- mainMonitor.begin(DCCppConfig::CurrentMonitorMain, DCCppConfig::SignalEnablePinMain, (char *) "<p2>");
- ...
- }
- void DCCpp::beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnable, uint8_t inCurrentMonitor)
- {
- ...
- progMonitor.begin(DCCppConfig::CurrentMonitorProg, DCCppConfig::SignalEnablePinProg, (char *) "<p3>");
- ...
- }
- void DCCpp::begin()
- {
- ...
- mainMonitor.begin(UNDEFINED_PIN, UNDEFINED_PIN, "");
- progMonitor.begin(UNDEFINED_PIN, UNDEFINED_PIN, "");
- ...
- }
Ajouter des boosters reviendrait à ajouter de nouvelles instances de la classe avec les pins qui vont bien pour couper le courant juste chez eux si un problème survient.
Je n’ai pas poussé ces modifications dans la bibliothèque officielle d’aujourd’hui parce que je n’ai pas pu tester. Si tu peux le faire, dis moi si ça marche…
-
-
Bibliothèque DCCpp 7 juin 22:32, par Philippe38
Bravo et bon début, ça fonctionne bien pour la voie principale qui se coupe sans action sur la voie de programmation. En cas de court-circuit sur la voie principale, elle seule est interrompue par l’Arduino.
Cependant je n’ai pas réussi à couper le DCC en faisant un court-circuit sur la voie de programmation ! Je vais voir pourquoi.
Maintenant vient la gestion du PowerOff() avecqui nécessite un nouveau paramètre pour couper individuellement le DCC d’une voie sans couper le DCC des autres voies. Et la même chose pour PowerOn(). C’est en pratiquant qu’on se rend compte du besoin.
Il faut pouvoir régler l’intensité maxi admise sur chaque circuit mais on peut se satisfaire de 2 valeurs : une pour les voies principales et une pour la voie de programmation. Encore quelques changements et ça sera parfait pour pouvoir ajouter d’autres districts. Je propose de ne pas toucher P0 à P3 mais d’individualiser en ajoutant P4 et P5, et ainsi de suite. Ce serait des options neutres si inutilisées et le tout reste compatible avec ce qui existe déjà. Pour la déclaration, on a juste besoin d’une pin Enable par nouveau district. Je continue les tests. -
Bibliothèque DCCpp 8 juin 15:01, par Philippe38
Dans CurrentMonitor.cpp au milieu de la ligne 42, il me semble qu’un + à disparu.
-
Oui, exact, mais mon code est bon. C’est l’afficheur du forum qui doit l’avoir interprété comme autre chose… En tout cas, il y a bien un ’+’, et s’il n’y est pas, il faut l’ajouter. J’ai corrigé mon post précédent.
-
-
Bibliothèque DCCpp 11 juin 18:00, par Lormedy
DCCpp intègre le bus S88 dans l’Arduino :
Comme la rétro-signalisation manquait dans la bibliothèque DCCpp de Thierry, j’ai ajouté le code qui gère la rétro-signalisation S88 et j’ai nommé le tout : DCCpp_S88. J’ai intégré la lecture directe du simplissime bus S88 sans qu’il soit nécessaire de passer par un quelconque boitier d’interface supplémentaire. Un seul Arduino suffit pour générer le DCC, piloter les aiguillages et les feux, et maintenant lire jusqu’à 512 capteurs grâce au bus S88. Naturellement j’ai rendu cette interface logicielle du bus S88 compatible avec les logiciels libres comme CDM-Rail, CDT30, JMRI et Rocrail. Je n’ai pas testé avec d’autres logiciels mais j’ai testé 2 types de cartes de rétro-signalisation différentes.
Cette extension offre 2 ports S88 distincts pour faciliter son utilisation avec les grands réseaux. Chaque fois qu’un capteur change d’état, les données du bus S88 sont envoyées vers le PC qui contrôle les trains. La lecture permanente en temps réel du bus S88 se fait en moins de 60ms et les données sont envoyées vers le PC en moins de 15ms par USB, sans que l’Arduino MEGA ne soit ni perturbé ni ralenti dans son fonctionnement.
Adieu aux forêts de fils qui partent de l’Arduino, un simple câble RJ45 suffit. Les infos des capteurs sont rassemblées sur place par une carte de rétro-signalisation puis transmises par le câble RJ45 vers la carte suivante et ainsi de suite le long du réseau jusqu’à l’Arduino. Le câble RJ45 du bus S88-N télé-alimente aussi les cartes, donc pas besoin d’alimenter séparément les cartes de rétro-signalisation. Sur le bus S88-N, ce logiciel permet le mélange des cartes à 8 entrées avec celles à 16 entrées.
Les explications et le code DCCpp_S88 pour Arduino que j’utilise se trouvent sur mon site Internet indiqué ci dessous
Voir en ligne : Le générateur DCCpp ++ bus S88
-
Bibliothèque DCCpp 18 juin 11:56, par Didier44
Bonjour » Thierry,
Je reviens vers DCCpp avec Ethernet et l’exemple EthernetDcc.ino.
J’utilise :- #define USE_ETHERNET_WIZNET_5100
et
- DCCpp::beginMainMotorShield();
- DCCpp::beginProgMotorShield();
A la compilation, j’ai cette erreur :
..libraries\DCCpp\src\DCCpp_Uno.h:29:27: error: 'eServer' was not declared in this scope
- #define DCCPP_INTERFACE eServer
J’imagine que tu as développé un serveur quelque part pour tes essais.
En remplaçant eServer par Serial cela ne passe pas non plus un peu plus loin : DCCpp.cpp ligne 345- DCCPP_INTERFACE.begin();
Je ne retrouve pas trace de cette fonction ?
Si je supprime cette ligne alors RAS pour la compilation !Avec DCC++ j’utilise régulièrement pour mes essais une connexion Ethernet via un programme en C++ sur mon PC et tout va bien.
Avec DCCpp mon programme me renvoie :- Error: "Socket operation timed out"
Et plus rien bien sur.
-
Bibliothèque DCCpp 19 juin 18:04, par Thierry
Oui, c’est corrigé dans la 1.3.5 que je viens de mettre en ligne.
Ça vient de la volonté d’utiliser une macro pour savoir à qui envoyer les messages texte. En mode normal, c’est ’Serial’ qui est utilisé, mais en configuration Ethernet, c’est une variable globale ’eServer’ déclarée dans les sources de DCCpp. Pour que cette variable soit utilisable partout, il faut la déclarer ’extern’, et c’est ce qui est fait dans comm.h . Pourtant, dans les dernières modifs qui ont vu INTERFACE être remplacé par DCCPP_INTERFACE pour un problème de compilation ESP32 (ou VisualStudio, je ne sais plus…), j’ai précisément oublié cette ligne ’extern’. D’où la variable inconnue… -
Bibliothèque DCCpp 19 juin 19:07, par Didier44
Merci Thierry pour a réponse mais j’ai toujours une erreur. Je précise que j’essaie simplement de compiler ton exemple EthernetDcc.ino avec ArduinoIDE. J’ai la même erreur avec Visual Studio Code !
…\Temp\ccVIMcJT.ltrans0.ltrans.o : In function `main’ :
:(.text.startup+0x330) : undefined reference to `eServer’ -
Bibliothèque DCCpp 19 juin 21:03, par Thierry
Je savais bien que j’avais oublié quelque chose, la première chose que j’ai vue, en fait !
Dans l’exemple il faut remplacerEthernetServer INTERFACE(2560) ;
par
EthernetServer DCCPP_INTERFACE(2560) ;
Je repousserai une version corrigée sur le Git bientôt…
-
Bibliothèque DCCpp 20 juin 10:31, par Didier44
Merci pour ta rapidité la compilation se fait correctement maintenant.
-
Bibliothèque DCCpp 20 juin 23:14, par Lormedy
Suggestion : ce serait bien de créer une constante ou un #define pour déclarer ce port dans un fichier.h global afin de pouvoir le changer facilement sans avoir à parcourir tous les fichiers à la recherche de variables disséminées dans les différents fichiers du projet. C’est valable pour toute variable de configuration.
-
Bibliothèque DCCpp 21 juin 11:43, par Jean-Luc
Oui,
Ça serait intéressant de pouvoir paramétrer une bibliothèque de cette façon. Malheureusement, et sauf erreur de ma part, lors de la compilation d’une bibliothèque, le répertoire du sketch n’est pas dans les chemins d’inclusion. Il y a d’ailleurs une issue à ce propos qui est ouverte depuis presque 4 ans.
-
-
-
Bibliothèque DCCpp et écran LCD 27 juin 13:17, par Juan
Bonjour, Thierry,
Je commence avec l’Arduino et il est clair pour moi que je vais construire ma central sur la base de votre fantastique bibliothèque DCCpp.
J’ai déjà fait quelques progrès et j’ai un premier prototype qui fonctionne parfaitement. Mais maintenant j’ai un doute : j’aime beaucoup l’écran LCD décrit par Dominique dans "Comment piloter trains et accessoires en DCC avec un Arduino (4).
La question est : comment puis-je implémenter cet écran et ses fonctionnalités avec la bibliothèque DCCpp ?Merci beaucoup,
Juan.Traduit avec www.DeepL.com/Translator
-
Bibliothèque DCCpp 27 juin 19:10, par msport
Bonjour,
si vous voulez mettre en œuvre un écran LCD 16x02, vous avez au moins deux réalisations qui fonctionnent très bien en autonome (mais pas seulement) :
http://locoduino.org/spip.php?article224
et
http://locoduino.org/spip.php?article232-
Merci beaucoup, je vais étudier attentivement ces deux montages.
Salutations,
Juan.
-
-
Bibliothèque DCCpp 17 juillet 19:05, par Juan
Bonsoir Thierry,
J’ai un problème "sérieux" : je ne peux pas installer la bibliothèque DCCpp sur mon Mega arduino, j’obtiens un message d’erreur. Les lignes rouges de l’erreur sont les suivantes (je ne sais pas comment inclure un fichier avec le message complet) :
C :\Users\Juan\AppData\Local\Temp\cc0MK6Hl.ltrans0.ltrans.o : In function `main’ ::(.text.startup+0x628) : undefined reference to `eServer’ :(.text.startup+0x62a) : undefined reference to `eServer’ :(.text.startup+0x840) : undefined reference to `eServer’ :(.text.startup+0x842) : undefined reference to `eServer’ :(.text.startup+0x1700) : undefined reference to `eServer’ C :\Users\Juan\AppData\Local\Temp\cc0MK6Hl.ltrans0.ltrans.o :
:(.text.startup+0x1702) : more undefined references to `eServer’ follow collect2.exe : error : ld returned 1 exit status
Usando librería DCCpp con versión 1.3.5 en la carpeta : C :\Users\Juan\Documents\Arduino\libraries\DCCpp
Usando librería Ethernet con versión 2.0.0 en la carpeta : C :\Program Files (x86)\Arduino\libraries\Ethernet
Usando librería EEPROM con versión 2.0 en la carpeta : C :\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM
Usando librería SPI con versión 1.0 en la carpeta : C :\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
exit status 1
Error compilando para la tarjeta Arduino/Genuino Mega or Mega 2560.Merci par votre temps.
Juan.-
Bonjour. c’est un problème que j’ai déjà corrigé. Récupérez le dernière version de la bibliothèque, cela devrait résoudre le problème.
-
Bibliothèque DCCpp 17 juillet 21:46, par Juan
Mais je pense que c’est précisément la dernière version que j’utilise, que je viens de télécharger depuis le depôt Locoduino.
-
-
-
Bibliothèque DCCpp 23 juillet 09:56
Dans ce cas, c’est que #define NO_ETHERNET n’est pas en remarque alors qu’il devrait… Désolé pour le délai, mais je suis en vacances loin de mon pc …
-
Bibliothèque DCCpp 24 juillet 18:05, par Juan
Bonjour, Thierry,
Pas de problème, je suis désolé de vous déranger en vacances.
La bibliothèque de DCCpp se porte si bien que ça. Et j’ai beaucoup d’autres questions sur la Commanders, mais nous ferions mieux de les laisser pour votre retour.
Profitez des vacances et "oubliez" le PC.
Juan -
Bibliothèque DCCpp 8 août 19:16, par Juan
Bonjour, Tiherry,
Une question sur ton retour de vacances. J’essaie de contrôler DCC+++ via Bluetooth avec le module HC-06.
Pas de problème si je connecte le module aux broches 0 et 1 du Uno ou du Mega. Mais bien sûr, je perds la connexion par le moniteur sérial. J’essaie d’utiliser d’autres pies, mais ça ne marche pas pour moi. Comment faire cette connexion sans perdre l’USB ?Je vous remercie beaucoup,
Juan
-
Bibliothèque DCCpp 8 août 20:23, par Thierry
Le Nano ne possède qu’une seule interface série effectivement utilisée par l’USB, mais il est possible d’en créer une de toutes pièces par logiciel avec les bibliothèques SoftwareSerial, AltSoftSerial ou NeoSWSerial. Attention toutefois à l’usage des timers et des interruptions par ces bib, alors que DCC++ en utilise aussi. Il ne faut pas qu’il y ai de collision…
Pour plus de sécurité, il reste la possibilité d’utiliser un circuit extérieur raccordé en SPI ou en I2C à l’Arduino. Je n’en ai pas trouvé chez mes marchands habituels, mais je ne cherche peut être pas avec les bons mots clés…-
Merci beaucoup pour votre réponse rapide. Le Nano et Uno n’ont qu’une seule interface série, mais j’utilise le Mega, qui je pense a quatre interfaces. Et il n’y a aucune chance que ça marche, vu mes courtes lumières sur le sujet, bien sûr.
-
Dernières nouvelles : J’ai fait que cela fonctionne parfaitement dans la Mega.
Mais avec Uno, ça ne marche toujours pas.
Il sera nécessaire de continuer les recherches.
Bonne nuit.
Juan.
-
-
-
Bibliothèque DCCpp 30 octobre 12:16, par Juan
Bonjour, Thierry.
J’ai terminé la première étape de mon modèle d’essai, qui consiste en un circuit simple avec deux aiguillages, plus plusieurs lumières et du son.
Ce que je propose dans un deuxième stade, c’est de monter les détecteurs de présence, pour pouvoir gérer le modèle automatiquement. Le circuit est déjà préparé avec les cantons correspondants. Et j’ai différents types de détecteurs d’occupation, mais ce dont je n’ai aucune idée, c’est du logiciel que je dois implémenter.Mais je ne sais pas par où commencer. Que me conseillez-vous ? quel logiciel dois-je ajouter pour travailler avec votre bibliothèque DCCpp ?
Merci bien,
Juan -
Bibliothèque DCCpp 14 novembre 19:41, par Juan
Bonne nuit, Thierry,
Une petite question : comment puis-je lire l’état, d’un aiguilage particulier, ?
Je vous remercie beaucoup,
Juan. -
Bibliothèque DCCpp 16 novembre 10:52, par thierry
Bonjour. Si on parle d’une instance de la classe Turnout, il y a une méthode ’isActivated()’ qui renvoie true ou false selon le sens de l’aiguille. Je n’ai pas contre rien trouvé dans la syntaxe texte de DCC++ qui permette de connaitre l’état d’un turnout. Du coup dans la prochaine version de DCCpp il y aura une syntaxe
où n est le numéro du turnout à interroger, ce qui renverra ou selon le sens. -
Bibliothèque DCCpp 16 novembre 10:59, par thierry
oups, la syntaxe DCC++n n’est pas passée… Donc la nouvelle commande serait "t n -1" (remplacer les guillemets par les caractères inférieur et supérieur), et le retour "H n 0" ou "H n 1".
-
-
Bibliothèque DCCpp 16 novembre 11:32, par Juan
Bonjour, Thierry,
Et merci beaucoup pour votre réponse. Permettez-moi d’expliquer mon problème : dans ma centrale, avec votre bibliothèque DCC++ je fais un TCO graphique, dans un autre arduino connecté en série et chargé de gérer un écran TFT 3.5". J’ai branché des détecteurs de courant comme inputs, qui agissent comme des senseurs qui me disent quel canton est occupé.
Tout cela fonctionne parfaitement (à ma grande surprise), ce qui me manque, c’est de manipuler les aiguilages. C’est-à-dire, savoir si une aiguilage est ouverte ou fermée, pour envoyer l’ordre correspondant à l’arduino eslave.Merci beaucoup pour votre aide,
Juan.
-
Bibliothèque DCCpp 16 novembre 13:39, par Thierry
Mais c’est DCC++ qui change la position des aiguillages ou c’est autre chose ?
-
Bibliothèque DCCpp 16 novembre 18:06, par Juan
C’est vrai, nous devons être précis. La centrale est géré avec le sketch SerialDcc.ino de votre bibliothèque DCCpp, et les aiguillages sont gérés avec des commandes série de manière standard :
, par exemple. Ce dernier "1" est l’état de la aiguilage, précisément celui que je veux récupérer.
Je ne sais pas si je m’explique bien.-
Bibliothèque DCCpp 16 novembre 18:09, par Juan
Erreur, la commande série est de la forme "T 12, 1", voilà ce que je voulais dire.
-
-
Bibliothèque DCCpp 16 novembre 18:12, par Juan
Ou pour faciliter les choses, supposons que les aiguillages soient traités par Rocrail.
-
Bibliothèque DCCpp 18 novembre 10:25, par thierry
Donc c’est bien DCCpp qui change la position des aiguillages parce que quelqu’un donne un ordre texte pour ça. Dans ce cas, je reviens sur ma précédente réponse : il n’y a rien de prévu par DCC++ pour retourner l’état courant d’un aiguillage. La prochaine version de DCCpp améliorera ça, mais elle risque de ne pas arriver très vite…
-
Bibliothèque DCCpp 19 novembre 21:54, par Juan
Bonne nuit.
Merci pour votre message, mais je ne suis pas d’accord avec le contenu : je pense qu’il est possible de retrouver l’état d’une aiguillage. En fait, je l’ai déjà fait, bien que partiellement. Je continue mes recherches, quand j’aurai perfectionné la méthode, je vous le ferai savoir, si vous êtes intéressé.
Salutations,
Juan.
-
-
-
-
-
Bibliothèque DCCpp 2 décembre 17:33, par Juan
Bonjour, Thierry,
J’ai été occupé et je n’ai pas pu répondre à ces messages.
Pour revenir au dernier sujet, je vous envoie ici la petite modification que j’ai faite dans "Tounout.cpp" :
#ifdef USE_TEXTCOMMAND
DCCPP_INTERFACE.print(" DCCPP_INTERFACE.print(data.id) ;
#ifdef USE_BLUETOOTH
BLUETOOTH.print(" BLUETOOTH.print(data.id) ;
#endif
if (data.tStatus == 0)
DCCPP_INTERFACE.print(" 0>") ;
// Serial3.write(’x’) ; // Prueba para la TFT
#ifdef USE_BLUETOOTH
BLUETOOTH.print(" 0>") ;
#endif
else
DCCPP_INTERFACE.print(" 1>") ;
// Serial3.write(’z’) ; // Prueba para la TFT
#ifdef USE_BLUETOOTH
BLUETOOTH.print(" 1>") ;
#endifAvec cette modification, quand j’active ou désactive l’aiguillage, le caractère "x" ou "z" est envoyé à Serial3, pour que je puisse obtenir quelque chose comme ceci :
"Tournout 1 = open", or "Tournout 1 = closed".
Comme je l’ai dit, ça marche parfaitement dans mon cas, où il n’y a qu’une seul aiguillage.
Ce que je ne sais pas encore faire, c’est faire plusieurs aiguillages.
Salutations
Juan. -
Bibliothèque DCCpp 3 décembre 20:30
Oui, on est donc d’accord. Il n’y a rien dans DCC++ qui retourne l’état d’un aiguillage. Il faut modifier le code pour y arriver.