Auteur Sujet: Decodeur d'accessoires de Rudy  (Lu 772 fois)

msport

  • Sr. Member
  • ****
  • Messages: 467
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Decodeur d'accessoires de Rudy
« le: août 29, 2017, 11:51:06 am »
Bonjour,
je cherche à faire fonctionner la fonction oneshot (n°2) du décodeur d'accessoires de Ruud Boer - September 2015 :
RB_DCC_Decoder_Accessory.ino
Les 4 fonctions fonctionnent normalement avec activation et désactivation.
Mais la fonction Oneshot devrait se réarmer toute seule et cela semble prévu à la ligne 166 (commentaire de la ligne 139)
Elle dépend de la condition du else accessory[addr].dccstate == 0

Cette condition est positionnée à la ligne 87 :
      if (address == accessory[ i].address)
      {
        if (enable) accessory[ i].dccstate = 1;
        else accessory.dccstate = 0;

Le (enable)  provient du DCC ligne 77 :
    // Convert NMRA packet address format to human address
    address -= 1;
    address *= 4;
    address += 1;
    address += (data & 0x06) >> 1;

    boolean enable = (data & 0x01) ? 1 : 0;


Mon booster est le DCC++ BASE STATION FOR ARDUINO UNO / ARDUINO MOTOR SHIELD: V-1.2.1+ bien connu.

Je cherche donc à comprendre où le reset de l'adresse de l'accessoire devrait être fait : est ce que c'est le booster conserve l'état de l'accessoire et renvoie le enable qui empêche le renvoi d'un nouvel ordre.

J'ai la solution de contournement qui est d'envoyer la désactivation de l'accessoire mais ce n'est pas ce que Rudy a prévu.

Merci pour votre aide.

Nota j'ai constaté qu'il faut une loco sur les rails pour que le décodeur fonctionne ...

Cordialement

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 452
    • Voir le profil
Re : Decodeur d'accessoires de Rudy
« Réponse #1 le: août 29, 2017, 04:35:06 pm »
Bonjour

D'après ce que je comprend du source, dccstate représente le flag enable tel qu'il a été envoyé par la centrale dcc. Personne ne le remet à 0, c'est la réception du paquet de désactivation qui le fait. Si le dccstate reste à 1, c'est peut être parce que DCC++ n'envoie pas ce paquet avec enable à 0 ?
« Modifié: août 29, 2017, 04:47:15 pm par Thierry »

msport

  • Sr. Member
  • ****
  • Messages: 467
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Decodeur d'accessoires de Rudy
« Réponse #2 le: septembre 07, 2017, 11:23:47 pm »
Merci (tardif) pour ces confirmations.
J'en conclus que c'est DCC++ BASE STATION FOR ARDUINO UNO qui ne désarme pas l'accessoire (le devrait-il ? et sur quelle base ? Est ce que d'autres centrales le font, ce que je suppose puisque Rudy n'a rien prévu dans son programme.)

Donc j'ai désactivé l'accessoire après la fin de la temporisation dans le sketch que j'ai joint dans :
http://forum.locoduino.org/index.php?topic=367.msg3482#msg3482
Cordialement