Auteur Sujet: besoin d'aide sur Universal Accesory Decoder  (Lu 26251 fois)

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #15 le: novembre 19, 2016, 07:38:33 pm »
Merci pour ces explications.

Pouvez-vous essayer mon sketch dcccommander de votre côté avec un envoi d'ordre par la console MS2 Trix ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #16 le: novembre 19, 2016, 08:42:15 pm »
Je ne pourrais pas ce soir, mais je tenterais demain...

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #17 le: novembre 20, 2016, 04:07:28 pm »
Après quelques essais, voici le résultat de mes pérégrinations. Je n'ai rien trouvé de suspect, le croquis marche parfaitement pour moi. Malgré tout, un petit plan de bataille pour se mettre dans les meilleures conditions :
1 récupérer les dernières versions de Accessories et Commanders. Les différences poussées aujourd'hui sont minimes et sans rapport avec le problème, c'est juste pour se mettre au même niveau.
2 récupérer aussi la nouvelle version du sketch. Peu de changement, juste l'ajout d'un SERIAL_COMMANDER et son initialisation. Cela va permettre de tester le script sans Dcc, pour au moins assurer que cela fonctionne.
3 Le dernier argument de DccCommander.begin() est là pour faire clignoter la diode si un signal Dcc est présent sur l'entrée. Ce n'est peut être pas nécessaire dans votre cas...
4 les versions des bibliothèques sont sans DEBUG_MODE, sans sauvegarde EEPROM, et aussi sans bus CAN, mais ça ce devait être déjà le cas... Éventuellement réactiver le DEBUG_MODE de Accessories.

#include "Commanders.h"
#include "Accessories.h"

// Accessories
AccessoryMotorTwoWays aiguille;

ButtonsCommanderPush push;

SERIAL_COMMANDER(Serial);

// Drivers
PortTwoPins port;

#define DCCID_DROIT   DCCINT(20, 0)
#define DCCID_DEVIE   DCCINT(20, 1)

void setup()
{
Serial.begin(115200);
Commanders::begin(LED_BUILTIN);
Accessories::begin();

SerialCommander.begin();

// Setup of the Dcc commander.
DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3));

// Setup of the buttons, one by accessory
push.begin(DCCID_DROIT, 4);
push.AddEvent(DCCID_DEVIE);

// Setup of ports
port.begin(6, 7, DIGITAL);

// Accessories setups

aiguille.beginTwoWays(&port, DCCID_DROIT, DCCID_DEVIE, 255, 250);
}

void loop()
{
unsigned long id = Commanders::loop();

if (id != UNDEFINED_ID)
{
// Renvoie l'événement reçu de Commanders, vers les accessoires...
Accessories::RaiseEvent(id, (ACCESSORIES_EVENT_TYPE)Commanders::GetLastEventType(), Commanders::GetLastEventData());
}

Accessories::loop();
}

Une fois tout en place, et si ça ne marche toujours pas, tester l'envoi d'un code Dcc en manuel : taper 20:0 ou 20:1 dans le champs de saisie de la console. Le moteur doit réagir. En tout cas, en DEBUG_MODE le PortTwoPins doit signaler un changement sur la console.

A suivre...
« Modifié: novembre 20, 2016, 04:50:38 pm par Thierry »

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #18 le: novembre 20, 2016, 04:47:40 pm »
bonjour,

j'ai mis à jour les librairies, copier votre code:
Plus aucune réaction sur les sorties que ce soit par le BP ou par l'envoi manuel en Serial :(
La led 13 ne réagit pas, seule la led Rx de mon arduino réagit quand j'envoie manuellement à travers la console série.

Dans aucun des cas la console série ne me renvoie quelque chose.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #19 le: novembre 20, 2016, 04:55:04 pm »
Si la led 13 ne moufte pas, c'est qu'il n'y a pas de signal Dcc sur le port 3. Elle devrait clignoter assez rapidement.
Cela est sans rapport, mais avez vous activé COMMANDERS_DEBUG_MODE et ACCESSORIES_DEBUG_MODE dans les fichiers .h ?

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #20 le: novembre 20, 2016, 05:02:03 pm »
j'ai activé ACCESSORIES_DEBUG_MODE mais pas COMMANDERS_DEBUG_MODE.
je viens de re-compiler avec les 2 activés et j'ai cette erreur:
Arduino\libraries\Commanders\src\Commanders.cpp:121:34: error: no 'void Commanders::printCommanders()' member function declared in class 'Commanders'

Edit:
J'oubliai un autre problème:
Dans les précédents tests ou cela réagissait par BP, les 250ms d'activation ne sont pas pris en compte. La sortie reste active indéfiniment jusqu'à une nouvelle action du BP pour activer l'autre sortie. Et même problème pour la 2eme sortie.
aiguille.beginTwoWays(&port, DCCID_DROIT, DCCID_DEVIE, 255, 250);
« Modifié: novembre 20, 2016, 05:18:11 pm par bagou91 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #21 le: novembre 21, 2016, 06:17:59 pm »
J'ai poussé la correction dans Commanders pour la compilation. Je verrai l'autre problème un peu plus tard (manque de temps)... Voyons déjà pour provoquer un mouvement.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #22 le: novembre 21, 2016, 07:25:00 pm »
bonsoir,
j'ai récupéré les nouvelles sources: ça compile bien en mode DEBUG :)

j'ai également trouvé pourquoi DCCCommander ne réagissait pas aux trames envoyées par CmdrArduino:
Dans votre fichier DccCommander.cpp, à partir de la ligne 57, vous expliquez que votre centrale MS2 envoie 3 fois la même trame avec le dernier octet à 1, puis 1 trame avec le dernier octet à 0. Si cette dernière trame est reçue, alors vous lancez la commande vers l'accessoire.
CmdrArduino n'envoie qu' 1 trame pour activer l'accessoire et le dernier octet est toujours = 1. C'est le 2ème octet de la trame qui indique quel sous-élément contrôler.

J'ai modifié le test ligne 64 comme ceci: if (activate)
ce qui signifie, si dernier octet = 1 alors on lance la commande.

J'ai recompilé avec cette modification, et ça fonctionne !
DccCommander réagit bien aux trames envoyées par CmdrArduino:
1er appui BP du CmdrArduino active ma 1ère sortie, 2ème appui BP active la 2ème sortie.

Je ne sais pas si ce type d'envoi de trame est commune à toutes les centrales DCC ou propre à la votre uniquement...

Par contre il reste toujours le bug des sorties constamment allumées tant qu'on ne ré-appui pas sur le BP.

Edit:
Peut-être une piste pour le bug des sorties:
Lorsqu'on appelle la méthode AccessoryMotorTwoWays::beginTwoWays(), celle-ci envoie le paramètre de Durée à la méthode AccessoryMotor::begin(). Hors cette dernière ne fait rien avec le paramètre de Durée (fichier AccessoryMotor.cpp ligne 15).

Edit:
BINGO !
Ma piste était bonne :D
J'ai ajouté this->SetDuration(inDurationMilli); dans la méthode AccessoryMotor::begin().

Recompilé et c'est bon !

Les sorties s'activent bien temporairement avec la durée définit de 250ms.

A vous de mettre à jour les librairies ;)
« Modifié: novembre 21, 2016, 07:50:12 pm par bagou91 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #23 le: novembre 21, 2016, 08:22:21 pm »
Content de voir que ça marche, et merci pour la bonne déduction ! Peut être ajouterais-je aussi un paramètre à DccCommander sur le modèle de useRaw... pour déclencher l'action sur un 1 plutôt que sur un 0. En même temps, j'ai respecté la norme, qui loin d'être spécifique à la MS2 précise bien que plusieurs trames sont envoyées en rafale avec 1 pour activer l'accessoire pour une certaine durée (trois trames pour la MS2), puis avec 0 pour l'éteindre. C'est parce qu'il n'y en a qu'une avec 0 que j'ai choisi de l'utiliser.
En tout cas, bravo, et bonne continuation.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #24 le: novembre 21, 2016, 08:32:19 pm »
Juste pour préciser et être sûr de la méthode DccCommanderClass::DccAccessoryDecoderPacket():
En fait vous déclenchez l'accessoire en vérifiant uniquement dans les trames reçues si la valeur activate est = false.
Il n'y a pas de vérification préalable comme quoi il y a eu 3 précédentes trames de reçues avec la valeur activate = 1.

Je vais regarder du coté de CmdrArduino et voir la séquence de trames envoyées pour 1 ordre...
« Modifié: novembre 21, 2016, 08:36:25 pm par bagou91 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #25 le: novembre 21, 2016, 08:33:55 pm »
Non, effectivement je ne vérifie pas, laissant ainsi la possibilité à d'autres centrales d'en envoyer une ou dix, ou même aucune, selon leur choix.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #26 le: novembre 21, 2016, 10:01:25 pm »
pour CmdrArduino, apparemment la librairie contient des erreurs.
j'ai trouvé une librairie corrigée et plus à jour ici: http://pgahtow.de/wiki/index.php?title=DCC#Software

Elle fonctionne bien et les trames envoyées sont bien reconnues et interprétées par DccCommander.
Juste 1 petite chose bizarre, je dois faire -1 sur l'adresse donnée dans CmdrArduino pour l'envoie d'ordre, car DccCommander récupère la trame mais avec l'adresse réceptionnée en +1.
D'un envoi de trame d'adresse 20, elle est réceptionnée en adresse 21.

Sinon c'est fonctionnel :)

Vous aurez donc juste à corriger votre librairie par rapport à la durée d'activation des sorties.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #27 le: novembre 22, 2016, 09:36:04 am »
Tout comme cmdrArduino a des problèmes, la librairie DCC decoder de Mynabay utilisée dans Commanders a aussi ses limites. Le décalage d'adresse sur certains contrôleurs en fait partie. C'est pourquoi j'envisage sérieusement de changer de librairie et d'utiliser plus tard https://github.com/mrrwa/NmraDcc qui semble beaucoup plus proche du standard... J'ai encore deux bibliothèques à sortir sur Locoduino avant de repasser sur Commanders pour faire ça, et sur Accessories pour ajouter les leds RGB et d'autres fonctionnalités.
« Modifié: novembre 22, 2016, 09:38:15 am par Thierry »

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #28 le: novembre 25, 2016, 01:05:13 pm »
Bonjour,

Juste pour information:
Pour tester, j'ai refait mes 2 skectchs en utilisant I2C à la place de DCC: fonctionne du 1er coup ! :)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2889
  • 100% Arduino et N
    • Voir le profil
Re : Re : besoin d'aide sur Universal Accesory Decoder
« Réponse #29 le: novembre 25, 2016, 08:32:03 pm »
Juste pour information:
Pour tester, j'ai refait mes 2 skectchs en utilisant I2C à la place de DCC: fonctionne du 1er coup ! :)

Bonjour,

Il me semble que je vous avais recommandé de ne pas passer par le DCC pour commander des accessoires sans passer par une centrale DCC (d'Arduino à Arduino). Essayez le CAN, c'est pas mal non plus !

Cordialement
Cordialement,
Dominique