Auteur Sujet: Essai manette DCC++ en C++  (Lu 26022 fois)

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Essai manette DCC++ en C++
« le: juillet 11, 2017, 04:43:48 pm »
Bonjour,

Après 2 semaines de lectures studieuses du site et du forum Locoduino loin de mon domicile me voila de retour à la maison.
Le temps de remettre mes locos en route après de nombreuses années dans les cartons, j'ai pu tester DCC++ sur un Arduino Mega + Arduino Motor Shield.

J'ai développé vite fait un premier outil qui me servira à comprendre les interactions avec DCC++ et me remémorer le dcc en général abandonné depuis quelques années.
Pour ce faire j'ai utilisé mon outil C++ habituel (Qt, gratuit pour un usage non commercial) et voici une commande rudimentaire mais fonctionnelle pour deux locomotives.
Il pourrait y en voir beaucoup plus (de locos) très facilement grâce à la notion d'objet: l'ensemble curseur, affichage LCD et bouton "stop" est une classe fenêtre (widget en c++).

Didier

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #1 le: juillet 12, 2017, 02:59:21 pm »
Bonjour,
après une tentative avec processing, je suis intéressé par une petite manette de test sur PC.
J'imagine que la mise en œuvre de Qt ne doit pas être trop délicate et le code trop compliqué ?
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3056
  • 100% Arduino et N
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #2 le: juillet 12, 2017, 06:19:11 pm »
Et bien ça tombe bien car un article y est consacré pour commencer la prise en main et il y en a d'autres qui suivent  ;D

http://www.locoduino.org/spip.php?article219

J'avais fait une petite manette l'année dernière pour tester DCC++ :

Cordialement,
Dominique

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #3 le: juillet 12, 2017, 07:02:25 pm »
Bonjour

Juste une précision :

- QT c'est une bibliothèque graphique pour C++

- Processing est fait pour développer du graphique

Mon expérience de C++ et du graphique en Java m'incitent à dire que ce n'est pas si simple que cela dans ces langages. Processing est plus adapté quand on manque d'expérience en graphique. Mais de toute façon le graphique ce n'est pas si simple que cela.

Pierre

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Essai manette DCC++ en C++
« Réponse #4 le: juillet 12, 2017, 11:16:19 pm »
Et bien ça tombe bien car un article y est consacré pour commencer la prise en main et il y en a d'autres qui suivent  ;D

http://www.locoduino.org/spip.php?article219

J'avais fait une petite manette l'année dernière pour tester DCC++ :
Merci Dominique, mais je n'ai pas réussi à la faire fonctionner :
La manette s'affiche bien mais une fois mes problèmes de port COM résolus (en modifiant la ligne concernée en String portName = Serial.list()[1]; )
Le moniteur indique :
COM1 COM8
<iDCC++ BASE STATION FOR ARDUINO UNO / ARDUINO MOTOR SHIELD: V-1.2.1+ / Jan 26 2017 21:22:53>
<N0: SERIAL>
In stop    <----------- bouton sortie, mais on ne quitte pas l'appli.
<p0>

l'application inverse bien la vidéo des boutons pour le sens, pour F0 et pour la sortie. La vitesse n'est pas active, ni le OFF.
Seul le bouton Sortie communique sur serial  et indique In stop sur le moniteur, avec une réponse <p0>

J'en suis resté là. Je suis prêt à tester d'autres skeches mais si quelqu'un avait fait tourner Processing sous Windows 10, j'aimerais avoir son retour d'expérience. Merci d'avance.
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3056
  • 100% Arduino et N
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #5 le: juillet 12, 2017, 11:20:39 pm »
Je n'avais pas testé depuis presque 1 an. Entre temps Processing a évolué : je vais regarder cela ASAP

Désolé
Dominique
Cordialement,
Dominique

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #6 le: juillet 13, 2017, 09:54:14 am »
Dominique, c'est moi qui suis désolé de ne pas avoir été assez persévérant :
je viens de télécharger la version 3.3.5 de Processing, de vérifier que le raccourci pointe bien dessus, de ne connecter qu'un booster DCCpp, de vérifier l'adresse de la loco et ça marche nickel.
Merci encore, et à l'écoute de nouveaux développements (TCO ?).
Amicalement.
Michel
« Modifié: juillet 13, 2017, 09:57:11 am par msport »
Cordialement

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #7 le: juillet 13, 2017, 04:53:46 pm »
Bonjour à tous,

Pour répondre à certaines de vos interrogations, Qt est un 'framework' en C++ utilisable sur Windows, Mac et Linux. Et pas seulement un outil graphique bien qu'il ait de nombreuses possibilités en ce domaine et notament la 3D. De plus avec chacun de ses OS il permet de développer également pour Androïd. Il est gratuit pour un usage non commercial et malgré cela complet. C'est un concurrent de VisualStudio de Microsoft.

Par rapport à du C++ de "base", il contient une "surcouche" de classes toute prêtes qui évitent d'avoir à réinventer l'eau chaude à chaque développement: tout est objet y compris les chaines de caractères par exemple ou bien l'accès série à Arduino qui demande juste quelques lignes de paramétrages dans une classe.
Il possède également un outil très simple et puissant pour définir des interfaces (fenêtres et autres boites de dialogues) juste avec la souris

Ceci dit, comme le précise Pierre59, ce n'est pas un outil aussi accessible que Processing qui a le mérite de pouvoir permettre de développer quelques applications rapidement.

Le but de cet exercice est pour moi de développer un télécommande sur PC (ou Mac et Linux avec quelques ajustement mais il me faudrait le matériel  :() sans TCO et de bien comprendre l'interface avec DCC++ et l'utilisation des fonctions du decodeur de la locomotive( F0, etc). Il est prévu un fichier de sauvegarde en XML qui permettra à chacun de définir sa propre configurations sans mettre les mains dans le code. Les boutons + et - visible sur l'image ci-dessous serviront à ajouter/supprimer une commande de locomotives.

Et je m'intéresserais surement aussi à Processing !

Bonne journée à tous  8)
Didier

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1122
  • HO avec DCC++
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #8 le: juillet 14, 2017, 11:45:25 am »
Bonjour Didier,

Bravo tout d'abord pour le travail que tu as réalisé. Tu as raison de persévérer car Qt est une autre (bonne) façon de réaliser des interfaces pour piloter des Arduino. Je l'ai pas mal utilisé il y a encore 5 ou 6 ans quand c'était la seule façon de créer des interfaces (hors Java). Maintenant, comme tu le vois, je développe plus sur des bases HTML5, CSS3, JavaScript et Node.js.

Et c'est très bien à mon avis que nous puissions présenter en parallèle des façons de faire différentes. Toutes sont bonnes mais l'une peut être préférée aux autres selon les contextes mais aussi la sensibilité propre de chacun. Eh oui, il y en a qui préfèrent C++ à Java (donc Processing) et C aussi.

Dans la série d'articles "Piloter son Arduino avec son navigateur web et Node.js", je vais proposer d'ici un mois environ une "manette" en HTML qui commandera DCC++ par le port série via Node.js

Ce sont donc trois chemins différents présentés dans Locoduino pour arriver au même résultat, le pilotage de DCC++. Je trouve ça génial.

Je suis prêt à t'aider pour la partie Mac. Adresse moi tes sources et je ferai les adaptations. Je chercherai également à réaliser les fichiers de configuration en Json et non en XML, tout aussi efficace mais autrement plus lisible car moins "verbeux" à mon avis. Là encore, ça donnera le choix.

Mon controller : http://176.154.165.92/locoduino/controller_dccpp/controller.php, dont je rappelle qu'il est opérationnel en ligne pour tous ceux qui voudraient le tester sur son propre circuit et avec ses propres locos, utilise plusieurs fichiers Json pour la configuration et la sauvegarde. On peut d'ailleurs voir jusqu'en bas de la page et après avoir sélectionné une loco, la présentation en Json des paramètres.



N'hésite pas également si tu cherches des infos sur les commandes de DCC++ car tu sais que Dominique et moi-même avons pas mal "planché" le sujet.

Bien amicalement.

PS : Au fait, il n'existe pas de fonction F29 mais par contre une fonction F0  ;D

Christophe.

« Modifié: septembre 03, 2018, 09:48:59 pm par bobyAndCo »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3056
  • 100% Arduino et N
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #9 le: juillet 14, 2017, 01:32:27 pm »
Et ça tombe bien, avec ce DCCduino à 3,10€ !
http://www.ebay.fr/ulk/itm/311155383820
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1122
  • HO avec DCC++
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #10 le: juillet 14, 2017, 01:38:22 pm »
Cool le Mini USB, et cool le prix aussi. Attention toute fois, je vois le prix en $, à ce qu'il n'y ait pas de taxe à l'arrivée.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3056
  • 100% Arduino et N
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #11 le: juillet 14, 2017, 02:35:08 pm »
Pas de souci pour le $ : quand tu choisis le modèle, le prix passe en € (sur eBay.fr) et le port est gratuit.

Juste un truc, il faut installer le driver CH340 en PJ sur OSX El Capitan et suivants (il est enfin signé avec Apple).
http://download.makeblock.com/mblock/CH34x_Install_V1.3.pkg
Cordialement,
Dominique

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Essai manette DCC++ en C++
« Réponse #12 le: juillet 15, 2017, 05:15:38 pm »
Pour Christopne
Citer
Au fait, il n'existe pas de fonction F29 mais par contre une fonction F0

C'est noté et corrigé :-\

Pour JSON c'est déja fait ! Tu pourras me corriger mais ça marche.

Encore quelques lignes de code avant de t'envoyer le source! Mais c'est pour bientôt...

Pour les fonctions, j'ai besoin de votre aide à tous
Dans la commande Processing de Dominique il y a un bouton pour la fonction F0 (je n'aurais pourtant pas du l'oublier celle là): il est à deux états ON ou OFF, chaque changement d'état envoyant une commande à DCC++.

Dans le source du DCC++ CONTROLLER, j'ai vu plusieurs type de bouton:
enum ButtonType{
  NORMAL,
  ONESHOT,
  HOLD,
  REVERSE,
  T_COMMAND,
  TI_COMMAND,
  Z_COMMAND
}


Pouvez vous m'en dire plus sur la typologie (= comportement) de ces boutons. Je ne suis pas à même de les tester moi-même.
Dans le code de DCC++ controllerConfig.pde, à savoir le dessin du TCO, j'ai relevé l'usage pour les fonctions de:
- NORMAL (pour les éclairages notamment) et la commande de F0 utilisé par Dominique cab2004.setFunction(35,15,60,22,60,10,0,"Headlight",ButtonType.NORMAL,CabFunction.F_LIGHT);- ONESHOT (pour ce qui pourrait être une annonce en gare) cab54.setFunction(35,75,60,22,60,10,14,"Passenger\nDep/Arr",ButtonType.ONESHOT);- HOLD (pour l’avertisseur sonore). cab54.setFunction(35,75,60,22,60,10,2,"Horn",ButtonType.HOLD,CabFunction.HORN);
Editer le 16/07: j'ai aussi trouvé REVERSE qui n'est pas très explicite
cab54.setFunction(35,105,60,22,60,10,3,"MARS\nLight",ButtonType.REVERSE,CabFunction.D_LIGHT);
Pour moi c'est suffisamment explicite. Mais n'ai je rien oublier ?
Merci à vous et bonne fin de WE

Didier
« Modifié: juillet 16, 2017, 10:49:10 am par Didier44 »