Auteur Sujet: Bibliothèque DCCpp  (Lu 661 fois)

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 383
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #15 le: février 04, 2018, 10:22:11 am »
Voilà pourquoi un schéma, une photo, une explication du contexte et les fichiers sources concernés sont nécessaires avant même de poser des questions.
Envoie ici tes fichiers ino complets, je pourrais ainsi mieux comprendre la situation.
D'après ce que tu dis, DccCommander reçoit bien des paquets accessoires pour les identifiants 2/0 et 2/1. Mais je ne sais pas si c'est ce qui est codé côté émetteur, ni ce que tu en fais dans ton ino de récepteur...
« Modifié: février 04, 2018, 10:31:08 am par Thierry »

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #16 le: février 04, 2018, 11:34:11 am »
voici les fichiers.

MaxiDcc pour la partie donneur d'ordre avec l'utilisation d'un LMD18200.
Les ordres envoyés à ma loco fonctionnent bien.

DccCommander pour la partie réception pour commander des accessoires
J'ai repris le schéma de l'optocoupleur de cet article (avec pin D3 pour l'interruption):
http://www.locoduino.org/spip.php?article39
« Modifié: février 04, 2018, 11:39:34 am par bagou91 »

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 383
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #17 le: février 04, 2018, 05:44:37 pm »
Pour turn1.begin().
Les trois arguments de cette fonction sont:

id : un identifiant interne à DCC++
add: adresse principale pour le Dcc
subadd: sous adresse pour le Dcc

Dans MaxiDcc on a turn1.begin(2, 1, 1);
Donc on devrait retrouver 1 / 1 real data dans l'affichage de DccCommander, ce qui n'est semble t-il pas le cas...

Honnêtement, je ne comprend pas. Le code de DCCpp (turnout.cpp) est simple :
DCCpp::mainRegs.setAccessory(this->data.address, this->data.subAddress, this->data.tStatus);
On envoie un ordre Dcc via le registre principal avec l'adresse et la sub-adresse spécifiée dans le begin().

Côté DccCommander, on reçoit bien un ordre accessoire (il n'affiche que ceux là...), mais les valeurs réelles ne sont pas les bonnes...

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #18 le: février 04, 2018, 05:50:42 pm »
Oui c'est ce que j'ai constaté aussi.
J'ai essayé diverses autres valeurs comme par exemple le 3eme argument de turn1.begin() qui influence les valeurs reçues côté Dcccommander...
Mais je n'arrive pas à interpréter cela.

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 383
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #19 le: février 04, 2018, 06:15:37 pm »
Bon. Il faudrait que je réunisse de quoi tester... Ça va prendre un peu de temps...

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #20 le: février 04, 2018, 06:24:25 pm »
j'ai trouvé quelquechose ! :D

dans DccCommander:
on reçoit la trame 3 fois pour chaque ordre, hors dans la bibliothèque de DccCommander, fichier DccCommander.cpp, ligne 65, tu expliques que tu attends 3 fois la même trame, puis une 4ème trame avec 0 au dernier octet pour activer l'accessoire.
Cette dernière trame n'est jamais envoyée par MaxiDcc donc pas reçu par DccCommander.

Si je supprime le test ligne 65, ça fonctionne: mon aiguille réagit bien !
Par contre au bout de quelques actionnements de mon interrupteur sur l'arduino MaxiDcc, l'arduino DccCommander finit par perdre les pédales, freeze, plante et reboot.
« Modifié: février 04, 2018, 06:28:10 pm par bagou91 »

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 383
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #21 le: février 04, 2018, 06:31:23 pm »
Ouf, voilà qui est rassurant.
Le problème est que selon la centrale, le format des ordres accessoire peut varier. Du coup, j'ai préféré me baser sur la présence d'une désactivation que j'ai considéré à l'époque comme forcément présente.
Peut être faudrait-il modifier DCCpp pour coller à la norme (s'il y en a une), ou modifier DccCommander pour réagir à un nombre donné d'activations au lieu d'une désactivation... Je vais voir ce que je peux faire côté Commanders, ça me parait plus simple. Et étudier la norme pour s'y conformer du côté DCCpp si elle existe. C'est déjà ce que j'ai fait (pour la prochaine version) pour les fonctions des locos que la norme demande d'envoyer deux fois...

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 383
    • Voir le profil
Re : Bibliothèque DCCpp
« Réponse #22 le: février 04, 2018, 08:09:19 pm »
Pour le plantage, il faudrait activer le mode debug de Accessories pour voir si quelque chose cloche. Je vais tenter de reproduire le problème ici...