LOCODUINO

Discussions Générales => Aide => Discussion démarrée par: Jocelyn le février 26, 2023, 06:40:59 pm

Titre: Commande de passage à niveau par DCC
Posté par: Jocelyn le février 26, 2023, 06:40:59 pm
Bonjour,
J'essaie depuis quelques jours de compiler deux programmes afin de pouvoir commander un passage à niveau depuis la multimouse Roco.
J'ai utilisé naïvement utilisé le programme 2 feux qui permet de lire et allumer deux feux selon la commande de la MM et le programme de passage à niveau "classique".
Voici mon dernier test, mais ne va toujours pas.
Votre aide me serait précieuse.
Merci d'avance
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 26, 2023, 06:52:20 pm
Bonsoir Jocelyn,

je travaille moi-même en ce moment sur le sketch decodeur DCC, je te propose de rajouter ces 2 lignes après la ligne 56:
Serial.print("address = ");
Serial.println(address);
Cela te permettra déjà de voir si ta commande arrive à bon port.

Cordialement
A. STUYTS
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 26, 2023, 07:40:46 pm
BonjourTony
Merci de ta réponse
En tapant ce code, je ne vois rien passer sur le monitor!
Titre: Re : Commande de passage à niveau par DCC
Posté par: msport le février 26, 2023, 09:08:51 pm
Bonsoir,

il faut mettre :

void setup() {
  Serial.begin(115200);

et 115200 bds dans le moniteur

et il y a un décalage de 4 adresses entre LENZ et la NMRA.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 26, 2023, 10:08:34 pm
Merci, ça ne change rien,
 Le moniteur ne marque que l'adresse et l'heure
Titre: Re : Commande de passage à niveau par DCC
Posté par: msport le février 26, 2023, 10:19:00 pm
c'est l'adresse que vous commandez depuis la MM ?

bizarre : d'où peut venir l'heure ?

Au fait, où a été publié le code source ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 26, 2023, 10:34:51 pm
J'ai essayer de compiler deux programmes, l'un pour la lecture de codes, qui modifie les sorties 3 et 4 en fonction du signal DCC reçu sur la broche 2 et l'autre depuis le code de locoduino pour les passages à niveau
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 26, 2023, 10:36:52 pm
bizarre : d'où peut venir l'heure ?

N'est ce pas l'horodatage de la console qui est activé ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 26, 2023, 11:14:59 pm
si j'ai bien compris la fonction heure,ne sert que pour le clignotement des feux
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 09:00:27 am
le message du monitor est l'heure, suivi de address = address et le pour le montage, le servo tourne en boucle et les leds du 6 clignotent
Titre: Re : Re : Re : Commande de passage à niveau par DCC
Posté par: msport le février 27, 2023, 10:04:49 am
bizarre : d'où peut venir l'heure ?

N'est ce pas l'horodatage de la console qui est activé ?
Bien sur, mon cher Watson ...
Titre: Re : Commande de passage à niveau par DCC
Posté par: chris_bzg le février 27, 2023, 11:22:25 am
Cela pourrait être aussi l'horodatage du moniteur de l'IDE (case à cocher ou décocher sur la dernière ligne du moniteur "Afficher l'horodatage").  ;)
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 01:49:35 pm
Merci de votre aide. Oui, c'était bien la fonction horodatage qui était activée. Seul le message "address = address" apparait sur le monitor.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 02:30:30 pm
Et où en es-tu du fonctionnement du sketch aujourd'hui ?
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: msport le février 27, 2023, 03:06:13 pm
Seul le message "address = address" apparait sur le monitor.
Cela voudrait dire qu'à la ligne 56 il y a :
Serial.print("address = ");
Serial.println("address");
et  non
Serial.print("address = ");
Serial.println(address);
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 03:24:17 pm
Ok, si je mets address sans les "", plus rien n'apparait dans le monitor
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 03:51:02 pm
Cela veut dire que l'ordre DCC n'est pas arrivé dans ton Arduino, voila pourquoi je t'avais demandé de mettre ces lignes.
Maintenant il faut chercher du coté du câblage de ton opto-coupleur qui reçoit les signaux DCC.

Peux-tu envoyer un schéma ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 04:24:26 pm
Bonjour,
voici le programme utilisé pour recevoir l'information depuis la centrale. Il allume une led verte sur la broche 3 si la fonction enable est envoyée sur l'adresse 117, et rouge sur la broche 4 dans le cas contraire.
C'est à partir de là que j'ai ajouté les fonctions du PN, certainement très maladroitement.

// Utilisation de la librairie DCC Decoder pour lire les trames DCC
#include "DCC_Decoder.h"

// Adresse de base du Arduino-Decodeur
#define baseAdresse 117 

// Déclaration des éléments par rapport aux broches de l'Arduino
// La LED verte est connectée à la broche 3
// La LED rouge est connectée à la broche 4
const int Led_Verte = 3;
const int Led_Rouge = 4;

// Cette fonction est appelée par la librairie pour
// chaque activer / désactiver au niveau des adresses
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data) {
  address -= 1;
  address *= 4;
  address += 1;
  address += (data & 0x06) >> 1;
  address = address + 4; // cette ligne devra être décommentée si centrale RocoMouse et/ou z21

  boolean enable = (data & 0x01) ? 1 : 0;
 
  // Ex: si adresse de base est 100 alors l'arduino réagit aux adresse 100, 101, 102,...
  // Si l'adresse accessoire envoyée par la centrale correspond à l'une de notre programme
  // Alors on récupère son état (activé/désactivé) et on exécute en conséquence les actions
  // Ici la gestion de l'alimentation de 2 LEDs.
  switch (address) {
 
    case (baseAdresse):
      if (enable) {
        digitalWrite(Led_Rouge, LOW);
        digitalWrite(Led_Verte, HIGH);
      } else {
        digitalWrite(Led_Rouge, HIGH);
        digitalWrite(Led_Verte, LOW);
      }
      break;

    // Cas pour les adresses suivantes
/*
    case (baseAdresse + 1):

      break;

    case (baseAdresse + 2):
     
      break;
*/
  }

}


void setup() {
 
  // Broche des LEDs en mode "Sortie"
  pinMode(Led_Rouge, OUTPUT);
  pinMode(Led_Verte, OUTPUT);
 
  // Init les Voyants, par défaut Rouge actif
  digitalWrite(Led_Rouge, HIGH);
  digitalWrite(Led_Verte, LOW);

  // Les 2 lignes suivantes permettent d'initialiser la librairie DCC Decoder
  DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
  DCC.SetupDecoder( 0x00, 0x00, 0 );
}


void loop() {

  // Appel de la librairie DCC pour lire les valeurs
  DCC.loop();
}
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 04:40:24 pm
Envoie le programme avec les lignes "Serial...." que je t'ai demandé stp
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 04:43:20 pm
voici le fichier, merci de ton aide
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 04:46:30 pm
Je reviens à ma réponse précédente, c'est au niveau de la réception du signal que tu dois avoir le problème, c'est pourquoi il me faut le schéma
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 05:22:50 pm
Peux-tu remplacer tes 2 Serial.print par ces lignes et me donner le résultat ?

   Serial.print("address = ");
  Serial.println(address);
  char buf[20];
sprintf(buf, "%d", address);
String stringTo = buf;
Serial.print("longueur = ");
  Serial.println(stringTo.length());
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 05:58:20 pm
en ajoutant ces lignes, le circuit fonctionne mais sans changer d'état. La led rouge d'occupation est allumée, les feux clignotent et le module sonore agit une fois.
Comme tu le dis, j'ai l'impression qu'il ne reçoit pas le signal DCC.
je t'ai mis le schéma synthétique de branchement, en symbolisant le circuit du 6N137 et du module son
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 06:31:44 pm
Quand tu dis le circuit fonctionne, qu'est ce qui s'affiche dans la console série ?

Ton schéma n'aide en rien à résoudre ton problème, de quel schéma es-tu parti pour la partie récupération/traitement DCC ?

Si tu n'es pas plus précis dans tes réponses, je ne pourrais plus t'aider malheureusement.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 06:49:23 pm
Le schéma est le schéma classique avec un optocoupleur 6N137. Je viens de vérifier les branchements et en installant un sniffer, les trames sont bien lues sur le monitor
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 06:52:27 pm
et ma question sur ce qui s'affiche maintenant dans la console série ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 06:58:01 pm
toujours rien!
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:00:37 pm
et en installant un sniffer, les trames sont bien lues sur le monitor

Qu'appelles-tu installer un sniffer ? As-tu juste téléversé un programme de sniffer dans ton UNO que tu utilises pour ton PN ? Et si oui lequel ?

On tourne en rond je crois...
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 07:04:17 pm
celui de Doc Marco
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:05:00 pm
celui de Doc Marco

??? Qu'esako ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 07:06:19 pm
je te joins le programme
Titre: Re : Commande de passage à niveau par DCC
Posté par: msport le février 27, 2023, 07:14:31 pm
Ce serait bien d'avoir une photo du montage où on voit les tenants et aboutissants ...
Titre: Re : Commande de passage à niveau par DCC
Posté par: msport le février 27, 2023, 07:25:47 pm
Pour voir si le signal arrive à l'Arduino, on utilise un multimètre en gamme "continu" et on regarde si on a 2,5V sur l'entrée D2 par rapport au GND.
C'est la valeur moyenne du signal carré.
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:27:52 pm
je te joins le programme

et ce programme tu l'as téléversé dans ton montage relié au PN ou l'as-tu mis dans un autre Arduino ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 07:28:26 pm
dans le meme
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:31:03 pm
Peux-tu envoyer une copie écran de la console série avec le sketch Doc Marco ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 07:41:33 pm
J'ai 1,4 volts entre le gnd et la sortie trame. Tu as raison, ce ne sont que des trames vides.
J'ai pourtant deux circuits avec deux arduino et deux opto, et ils font la meme chose!
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:46:34 pm
Tu es sur la bonne voie, il semblerait que ta centrale n'envoie rien de cohérent.

Bon courage pour la suite et bonne soirée

Cordialement
Antoine
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 07:53:34 pm
Ce serait bien d'avoir une photo du montage où on voit les tenants et aboutissants ...

Je suis totalement d'accord avec Michel, une photo et surtout un schéma précis (juste de la partie 6N137) serait utile.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 08:38:34 pm
merci de tes réponses.
Le schéma du 6N137 est celui de la page 8 du document joint. J'en ai réalisé 2, l'un sur une plaque d'essais, l'autre sur un circuit imprimé fabriqué par un membre du forum.
 
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 08:53:43 pm
Ce qui est encore plus étrange est lorsque j'ai ajouté les lignes que tu m'as proposées sur le programme 2 feux que j'ai utilisé au départ, les fonctions s'activent!!!
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 27, 2023, 09:20:53 pm
merci de tes réponses.
Le schéma du 6N137 est celui de la page 8 du document joint. J'en ai réalisé 2, l'un sur une plaque d'essais, l'autre sur un circuit imprimé fabriqué par un membre du forum.

Sur la plupart des schémas de sniffer il y a une capa d'environ 27pF en parallèle sur la diode D4, tu peux toujours essayer puis enlever les lignes de code que je t'ai proposées pour voir si cela fonctionne.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 27, 2023, 10:17:10 pm
toujours pareil, le monitor est désespérément vide! >:(
Titre: Re : Re : Commande de passage à niveau par DCC
Posté par: msport le février 27, 2023, 10:19:47 pm
J'ai 1,4 volts entre le gnd et la sortie trame.

Si sortie trame = D2, le montage est bancal. Ou la mesure mal prise : c'est avec le calibre continu ? car si le sniffer décode les packets idle, c'est que l’interface fonctionne. Vérifier que le sniffer n'affiche rien si le DCC est déconnecté.
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 28, 2023, 08:08:44 am
Ce qui est étonnant c'est que lorsque je televerse le programme simple qui inverse les deux les leds avec l'adresse 117 , il fonctionne !
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 28, 2023, 09:27:49 am
Bonjour Jocelyn,

peux-tu faire l'essai suivant:

Tu installes la librairie Nmra suivante: https://github.com/mrrwa/NmraDcc

Puis tu téléverses le sketch ci-joint sur ton Arduino équipé du sniffer et relies 1 servo à la pin A0.

Tu devrais voir sur la console série les adresses que tu envoies par ta centrale et le servo devrait faire un va et vient.

Bon essai
Cordialement
Antoine
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le février 28, 2023, 02:11:22 pm
Super, cela fonctionne!
Merci du temps que tu passes.
C'est donc dans le programme qu'il y a un bug alors?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le février 28, 2023, 04:27:29 pm
Oui, mais je pense que la librairie servo et DCCDecoder ont du mal à cohabiter, mais cela n'engage que moi.

A toi d'adapter le sketch à la librairie NmraDCC.

Cordialement
Antoine
Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le mars 01, 2023, 08:35:08 am
Merci Antoine. Je pense que dans  mon sketch il y a deux parties, l'une qui est sensée recevoir le DCC, et l'autre qui assure les différents événements. Je crois que la deuxième fonctionne et attend l'information de la première. Qu'en penses-tu ?
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le mars 01, 2023, 09:15:09 am
Bonjour Jocelyn,

c'est tout a fait cela, et les 2 parties sont bien distinctes. Par contre je ne comprends pas trop ce que tu veux faire car la partie PN est sensée fonctionner avec des capteurs sur les voies (IR ou autre), or si j'ai bien compris toi tu veux le commander avec ta MM.

Je te propose de réaliser ton sketch en 2 étapes. La première serait de gérer simplement les leds afin qu'elles répondent à ton besoin.
Ensuite quand cela fonctionne tu peux passer à la gestion du PN.

Quand tu auras réussi la première étape, envoie moi le sketch avant de passer à l'étape suivante.

Cordialement
Antoine 
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le mars 01, 2023, 10:10:04 am
Je viens de faire des essais avec ton sketch "Decodeur_2_feux_26_fevrier.ino" et c'est bien la partie gestion des servos qui bloque le programme.
Le voici avec la gestion des servos désactivée, tu peux essayer pour voir si cela fonctionne

Comme il y a plusieurs delay() dans les boucles des servos, je pense que cela empêche la détection correcte des trames DCC.

Il vaut mieux partir sur la librairie SlowMotion comme l'exemple que je t'ai fourni.

Bon courage, tu vas y arriver  :)

Titre: Re : Commande de passage à niveau par DCC
Posté par: Jocelyn le mars 01, 2023, 10:31:00 am
Merci Antoine
Tu as raison, maintenant la première partie fonctionne, les leds verte et rouge s'inversent en actionnant l'adresse 117, par contre, le clignotement ne démarre pas!
Titre: Re : Commande de passage à niveau par DCC
Posté par: Tony04 le mars 01, 2023, 10:48:27 am
Aie!!!

es-tu sûr de ne pas avoir attaqué trop difficile pour commencer ? Car j'ai l'impression qu'il te manque pas mal de bases pour la suite des opérations.

Mais rassure-toi, je peux continuer à t'aider, il faut juste que tu sois plus concis dans tes messages et pour ne pas "polluer" inutilement le forum, pourquoi ne pas communiquer en direct par nos messageries persos.
Tu peux m'envoyer ton mail par messagerie privé si tu le souhaites.