LOCODUINO
Parlons Arduino => Le logiciel DCC++ => Discussion démarrée par: Juan le avril 01, 2022, 08:51:31 am
-
Bien que le titre de ce nouveau sujet puisse sembler être le même que le précédent, le sujet est différent.
Je fais fonctionner mon modèle avec un central DCC++ avec la bibliothèque Locoduino, et une connexion Bluetooth. Mon projet comporte 9 aiguillages à solénoïde qui sont actionnés par un décodeur composé d'un Nano, d'un multiplexeur MCP23017 et de l'ULN2803 correspondant. Et tout fonctionne parfaitement, et je contrôle tout avec un smartphone, ou avec le PC (RocRail, JMRI,..).
J'ai récemment ajouté un écran tactile TFT au central avec lequel je peux contrôler quatre locomotives simultanément, avec leurs fonctions correspondantes (j'inclus une photo).
Et maintenant je voudrais ajouter 9 boutons poussoirs pour contrôler les aiguillages, sans oublier le Bluetooth et le contrôle par PC.
Aucune idée, aucune aide,
Merci beaucoup à tous,
Juan
-
C’est juste une question de logiciel : ajouter la gestion des boutons poussoirs à votre logiciel, et les associer aux commandes d’aiguilles.
Exemple comme toujours dans le va et vient qui greffe la gestion de boutons et capteurs sur DCCpp sans perdre les commandes via usb ou série ( https://www.locoduino.org/spip.php?article232 (https://www.locoduino.org/spip.php?article232)) où vous pourrez trouver inspiration.
La bibliothèque « Commander » peut aussi être utilisée.
-
Merci beaucoup Dominique, mais après une première lecture du Va et Vient, ... je n'ai rien clarifié. Je veux gérer les aiguillages, et il n'y en a pas dans le VV.
Pourriez-vous être un peu plus explicite ?
Encore une fois, merci beaucoup,
Juan
-
Bonsoir,
il faut envoyer sur le Rx de la centrale DCC++ les séquences prévues par Greg E. Berman qui a codifié les commandes pour les aiguillages de la manière suivante :
< a ADDRESS SUBADDRESS ACTIVATE >.
Sont donc nécessaires :
pour l’adresse 1 : <a 1 0 1> pour normal puis <a 1 0 0 0> pour dévié.
pour l’adresse 2 : <a 1 1 1> pour normal puis <a 1 1 0 0> pour dévié.
pour l’adresse 3 : <a 1 2 1> pour normal puis <a 1 2 0 0> pour dévié.
pour l’adresse 4 : <a 1 3 1> pour normal puis <a 1 3 0 0> pour dévié.
pour l’adresse 5 : <a 2 0 1> pour normal puis <a 2 0 0 0> pour dévié.
pour l’adresse 6 : <a 2 1 1> pour normal puis <a 2 1 0 0> pour dévié.
pour l’adresse 7 : <a 2 2 1> pour normal puis <a 2 2 0 0> pour dévié.
pour l’adresse 8 : <a 2 3 1> pour normal puis <a 2 3 0 0> pour dévié.
pour l’adresse 9 : <a 3 0 1> pour normal puis <a 3 0 0 0> pour dévié.
Etc.
En effet, la commande directe correspond à l’envoi d’un 0 à la sous-adresse et la commande déviée à l’envoi d’un 1 à la sous-adresse.
Le détail des commandes pour DCC++ est là :
https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation
https://www.locoduino.org/ecrire/?exec=article&id_article=304
On peut utiliser le Bluetooth.
-
Merci beaucoup à msport pour votre aide, mais ce n'est pas le problème.
il faut envoyer sur le Rx de la centrale DCC++ les séquences prévues par Greg E. Berman
Yo conozco muy bien el código de Greg Berman, el problema es cómo envío esas secuencias desde dentro de la propia central, con un pulsador que está unido físicamente a la central.
Un saludo,
Juan,
-
Désolé, j'ai envoyé le texte sans le traduire :
Je connais très bien le code de Greg Berman, le problème est de savoir comment envoyer ces séquences depuis l'intérieur du central DCC lui-même, avec un bouton poussoir qui est physiquement attaché au central DCC.
Meilleures salutations,
Juan
-
Que voulez-vous faire exactement ?
- commander les aiguilles en DCC (donc avec un décodeur DCC pour chaque aiguille)?
ou
- commander les aiguilles directement via des relais par exemple ?
Dans le 1er cas, il faut envoyer le code DCC++ via le serial de l'arduino
Dans le 2ème cas, c'est facile de commander des pins de l'Arduino directement à partir des boutons.
Est-ce que cela répond à a question ?
-
Bonjour Dominique,
Non, ce n'est ni l'un ni l'autre, c'est plutôt le mélange. Voyons voir :
Je veux commander les aiguillages (connectés à un décodeur DCC (les neuf aiguillages connectés à un Nano) avec des boutons poussoirs connectés à la centrale DCC.
Merci beaucoup,
Juan
-
Donc votre centrale DCC doit commander les aiguilles à partir des commandes série décrites dans la réponse #3 de msport : est-ce bien ça ?
Vous pouvez le tester en tapant ces commandes dans le moniteur de l’IDE.
Maintenant vous souhaitez le faire à l’aide de boutons poussoirs dans le code du programme de la centrale qui utilise la bibliothèque DCCpp.
C’est ça ?
-
En effet, Dominique. Mon unité de commande fonctionne parfaitement, et je peux commander les aiguillages par série, soit par PC, soit par smartphone.
Et maintenant, j'aimerais pouvoir commander les aiguillages avec des boutons-poussoirs également. Tout en étant capable d'utiliser les commandes série, bien sûr.
-
Avez-vous envisagé de commander les aiguillages sans passer par le bus DCC (sans générer les commandes d'aiguillages en DCC, et sans utiliser de décodeur DCC), simplement en commandant le Nano des aiguillages directement : est-il place près ou loin de la centrale DCC ?
Par exemple, en connectant les boutons poussoirs sur le Nano des aiguillages plutôt que sur la centrale DCC ?
Peut-être voulez-vous rassembler toutes les commandes sur l'unité de commande (qui a son écran tactile). Mais alors à quoi servent le smartphone et le bluetooth ?
Avez-vous une schéma de principe général montrant tous les modules, les connexions et ce que vous envisagez d'ajouter ?
-
J'imagine que le bluetooth envoie ses ordres au serial ...
Si c'est le cas, je suggère d'utiliser un autre nano pour générer les commandes DCC venant des boutons sur son serial et de les envoyer à la centrale via bluetooth
A noter que l'accès partagé du serial fonctionne pour les modules radio HC12.
-
Bonjour à vous tous,
Et tout d'abord, merci pour votre aide.
Je vais essayer de préciser un peu plus le problème : il s'agit de gérer les accessoires en général, les aiguillages en particulier, à partir de la centrale DCC++ elle-même, et non à partir du port série. Voici la question.
Pourquoi en ai-je besoin, si j'ai déjà le bluetooth ? Eh bien, pour jouer, Dominique, pour apprendre, par pure curiosité, il n'y a pas d'autre raison.
Et je peux vous dire qu'après avoir étudié la bibliothèque DCC++, je pense connaître le moyen de l'obtenir : le fichier Turnouts.cpp. Il se trouve que pour l'instant, tout cela est trop pour mes connaissances limitées, mais je vais continuer à enquêter.
Meilleures salutations,
Juan.
-
Bonjour,
peut-être que la bibliothèque de Thierry est plus facilement utilisable (mais je ne maitrise pas)
voir l'exemple :
https://github.com/Locoduino/DCCpp/blob/master/examples/MaxiDcc/MaxiDcc.ino
où il est question de boutons et d'aiguillages.
-
En effet, msport, c'est là que je pense que la solution se trouve !
Mais je ne suis pas non plus un expert, loin de là, c'est pourquoi j'ai demandé l'aide du forum.
-
Peut-on vous suggérer de faire fonctionner le sketch donné en exemple qui comporte ce que vous demandez, boutons, aiguillages et locomotives.
A charge pour vous de l'adapter à vos autres besoins.
-
Oui, c'est ce que je compte faire, essayer d'adapter le sketch MaxiDcc.ino à mes besoins. Mais comme je l'ai dit, je ne suis pas un expert, alors nous verrons ce qui se passe.
Mais si je réussis, je vous ferai part du résultat.
Merci beaucoup à vous tous .
Juan.
-
Bonjour,
Finalement, à force de tourner en rond, j’ai trouvé dans DCCpp.hpp :
static void setAccessory(int inAddress, byte inSubAddress, byte inActivate);
que l’on doit pouvoir appeler avec :
DCCpp ::setAccessory(Address, SubAddress, Activate); (je n'ai pas testé mais ça compile)
Effectivement, dans le DCC, les aiguillages sont traités comme des accessoires.
-
Votre découverte semble très intéressante. Je pourrais alors "en quelque manière" associer un bouton poussoir à l'instruction
DCCpp ::setAccessory(Address, SubAddress, Activate),
et ensuite je pouvais gérer l'aiguillage avec le bouton poussoir.
Cela semble si facile, je dois essayer.
Merci beaucoup pour votre aide.
Regards,
-
Bonjour, msport,
Je suis en train de tester selon votre dernier message, mais je n'arrive pas à faire compiler l'IDE (mes connaissances sont très limitées). Pouvez-vous me dire comment vous avez réussi à le faire compiler ?
Merci beaucoup,
Juan.
-
Encore une fois, bonjour,
J'ai réussi à le faire fonctionner, à l'aide d'un bouton poussoir, j'ouvre et je ferme l'aiguillage.
Mais j'ai un doute : comme il est considéré comme un accessoire, ne dois-je pas déclarer d'une manière ou d'une autre le temps d'activation, afin de ne pas brûler le solénoïde ?
Et je n'ai aucune idée de comment faire ça.
Cordialement,
Juan.
-
Encore une fois, bonjour,
J'ai réussi à le faire fonctionner, à l'aide d'un bouton poussoir, j'ouvre et je ferme l'aiguillage.
Mais j'ai un doute : comme il est considéré comme un accessoire, ne dois-je pas déclarer d'une manière ou d'une autre le temps d'activation, afin de ne pas brûler le solénoïde ?
Bonsoir,
ça c'est le job du décodeur.
Si ça n'a pas grillé, c'est que le décodeur l'a géré.
Sinon voir :
https://www.dropbox.com/s/qkhrc147m38llb9/Arduino_DCC_S88.zip?dl=0
et choisir RB_DCC_Decoder_Solenoid
-
Pouvez-vous me dire comment vous avez réussi à le faire compiler ?
Ce code passe à la compilation :
#include <DCCpp.h>
int Address;
byte SubAddress;
byte Activate ;
void setup() {
Serial.begin( 115200 );
DCCpp::begin(); //
DCCpp::beginMain(UNDEFINED_PIN, 10, 3, 14); // pour main
DCCpp::powerOn();
}
void loop() {
DCCpp ::setAccessory(Address, SubAddress, Activate);
}
-
Oui, merci beaucoup, tout fonctionne parfaitement maintenant. J'ai inclus un clavier matriciel 4x3 pour gérer mes 9 aiguillages. Et je vais aussi ajouter 9 néopixels pour indiquer leur état.
Je téléchargerai des photos lorsque je l'aurai mieux défini.
Merci beaucoup pour tout,
Juan.
-
Désolé, j'ai oublié ça. Voici les photos de deux tableaux de distribution, avec le clavier pour les 9 aiguillages.
Un panneau de commande est le DCCpp d'Infotronik, et l'autre est le DCC-EX.
-
Voici la centrale de DCCpp de Infotronik