Besoin d'aide: Port série - Projet: Table de tir

Besoin d’aide: Port série et DMX - Projet: Table de tir

Bonjour à tous,

Alors voila, j’ai un projet sur lequel je travail actuellement avec un ami.

Nous sommes entrain de créer une table de tir (pour feu d’artifice) avec plusieurs arduinos. Nous voulons utilisé le protocole DMX pour envoyer, depuis le pupitre principal, les ordres de tirs des boîtiers déportés.

Nous avons également créer une interface graphique qui lis un fichier CSV (exporté depuis un logiciel de simulation) pour créer un plan de tir.

J’ai eu un problème de port série qui interférait avec le shield DMX, qui a été rapidement résolu (Merci à vous <3 ).

Cependant un nouveau problème se pose à nous …
Je n’arrive simplement pas à lire les données du port série …

#include <DMXSerial.h>

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

  DMXSerial.init(DMXController);
}

void loop()
{
  while(Serial.available() < 2);
  byte LeBuffer[2];
  Serial.readBytes(LeBuffer, 2);
  DMXSerial.write(LeBuffer[0], LeBuffer[1]);
}

Merci d’avance pour votre aide !

Cordialement,

Renzejo

renzejo:
Cependant un nouveau problème se pose à nous ...
Je n'arrive simplement pas à lire les données du port série ...

bonsoir
pas claire ta question
tu aurais peut etre du rester sur ton ancien topic

si je me refere à ton precedent topic, tu souhaite utiliser une mega pour :

  • recevoir sur un serial hard de l'info "formatée" en CSV (venant d'un PC)
  • traiter cette "info CSV" pour generer de l'info DMX
  • envoyer sur un autre serial hard de l'info "formatée" en DMX (à destination d'un dispo de mise à feu)

?

Vous avez lu cela

http://playground.arduino.cc/Learning/DMXSerial

Bonjour,

J-M-L:
Vous avez lu cela

http://playground.arduino.cc/Learning/DMXSerial

A Arduino Library for sending and receiving DMX

il y a eu méprise, la partie DMX fonctionne, se qui ne fonctionne pas pour moi, c’est la liaison entre le pc et l’arduino, et plus précisément la liaison entre mon interface graphique et mon arduino !

Artouste:
bonsoir
pas claire ta question
tu aurais peut etre du rester sur ton ancien topic

si je me refere à ton precedent topic, tu souhaite utiliser une mega pour :

  • recevoir sur un serial hard de l’info “formatée” en CSV (venant d’un PC)
  • traiter cette “info CSV” pour generer de l’info DMX
  • envoyer sur un autre serial hard de l’info “formatée” en DMX (à destination d’un dispo de mise à feu)

?

Voici un petit schéma, qui sera plus pratique pour expliquer le fonctionnement :wink:

La partie que je n’arrive pas à rendre opérationnelle est la partie liaison série entre le pc et l’arduino, rien ne se passe, je reçois bien les données car la led RX clignote, en debugant, j’ai trouver via le Serial.avaible() que je recois des données (il me met le nombre d’octets en attente de lecture) mais pas moyen de recup les valeurs …

Cordialement,

Bonjour,

Du coté de la réception ça à l’air (presque) correct. Il faudrait voir du coté de l’émission. Tu émets bien 2 octets?

Oui du l'envois se fait du type [y]

bonjour
tu utilise une mega ?
tu essaye de recevoir du PC par le serial standard ?
mais ton canal DMX , il est aussi sur le serial standard ou alors tu l’a affecté au serial1 hardware de la mega

// For using the serial port 1 on a Arduino MEGA 2560 board, enable the following DMX_USE_PORT1 definition.

si tu n’a rien defini de particulier , je sens venir le conflit

Non non, j'utilise bel est bien le serial1 hardware de la mega :slight_smile:

J'essaye d'envoyer les données via l'usb (Serial) de la méga oui

renzejo:
Non non, j'utilise bel est bien le serial1 hardware de la mega :slight_smile:

J'essaye d'envoyer les données via l'usb (Serial) de la méga oui

oui , j'ai relu ton ancien topic , et l'on avais déjà abordé alors ce point :sunglasses:

ton PC envoi de la data sous quel "format" (tu evoquais du CSV)
comment configure tu ton logiciel PC (vitesse,parité et autres joyeusetés) ?

Si je resume , en fait tu ne sais pas :

  • si tu reçois bien qq chose sur ton serial (mais il semblerait que oui --> LED RX)
  • si ce qui est reçu est bien ce que tu attend/pense pour pouvoir traiter.

il faut déjà monter une manip simple pour lever le doute
je suppose que tu n'a pas d'analyseur logique ?
mais tu a ta mega , et je suppose que tu dispose aussi d'autres arduino (uno/nano) ?

poste un fichier exemple de ce que ton PC est censé envoyer vers le serial

Etant donné que j'ai créer mon appli PC avec un ami, je lui demande les details de la communication et je t'envois tout ça demain

Se que je sais d'ores et déja, c'est que notre application PC lit le fichier CSV et "stocke" les données dans le programme. Par la suite, il envoie les données directement dans ce style la [addresse] [valeur]

Je ne sais pas se qu'est un analyseur logique x) du coup je suppose que j'en ai pas x)
En revanche, j'ai d'autres méga et une uno (il me semble)

Merci de tes réponses en tout cas !

Alors pour les paramètres:

9600 bauds
Pas de parité
8bits data
1bit stop

L'envois des données se fait "en direct", codé sur un char. 1 octet channel et 1 octet boitier.

renzejo:
Alors pour les paramètres:

9600 bauds
Pas de parité
8bits data
1bit stop

L’envois des données se fait “en direct”, codé sur un char. 1 octet channel et 1 octet boitier.

bonjour
fais un essai avec un programme structuré comme çà
note au passage que tu n’a avec la methode utilisée aucune securité de transmission
il suffit que tu foire une lecture d’octet , pour que toute les transmissions suivantes soient foireuses.

#include <DMXSerial.h>
byte canal;
byte box;
void setup()
{
  Serial.begin(9600);

  DMXSerial.init(DMXController);
}

void loop()
{
  if (Serial.available() > 1) {
    canal = Serial.read();
    box = Serial.read();
    DMXSerial.write(canal, box);
  }
}

Hello !
A peine rentrer, j'ai tester ton programme est résultat ... Pariel, rien ne se passe au niveau de mon projecteur DMX ... Il fonctionne bien et le shield aussi (j'ai tenter un programme qui me l'allume juste en rouge et sa fonctionne), toujours un problème au niveau de la lecture visiblement :confused:

renzejo:
Hello !
A peine rentrer, j'ai tester ton programme est résultat ... Pariel, rien ne se passe au niveau de mon projecteur DMX ... Il fonctionne bien et le shield aussi (j'ai tenter un programme qui me l'allume juste en rouge et sa fonctionne), toujours un problème au niveau de la lecture visiblement :confused:

bonjour
il faudrait déjà etre certain que ce qui arrive sur le RX de ta mega est bien ce que tu attend
avec ce que tu a sous la main , le plus simple est que tu utilise un autre arduino pour simplement servir de passerelle
(RX mega vers TX autre, TX mega vers RX autre, et de faire un log fichier par exemple avec terminalbpp

Bonsoir,

Je n'ai pas très bien compris se que je devais faire, du moins, il me semble.

J'ai fait un premier test, J'ai mis un programme qui ne fait qu'émettre un mot, j'ai visualiser grace a ton logiciel se qu'il y avait, et rien. Je ne sais pas si c'est correctement effectué par contre ...

Merci :slight_smile:

Hello

J’ai finalement fini par pigé se que tu voulais dire ^^

Et j’ai finalement trouvé où sa bloque !

J’ai utilisé la base de ton programme plus haut :

#include <DMXSerial.h>
byte canal;
byte box;
void setup()
{
  Serial.begin(9600);

  DMXSerial.init(DMXController);
}

void loop()
{
  if (Serial.available() > 1) {
    canal = Serial.read();
    box = Serial.read();
    DMXSerial.write(canal, box);
  }
}

J’en ai finalement sortie ce code ci:

#include <DMXSerial.h>

char canal;
char data;

void setup() {
  
  Serial.begin(9600);
  DMXSerial.init(DMXController);
}

void loop() {
  
   
   if (Serial.available() > 1) 
   {

    canal = Serial.read();
    data = Serial.read();
    
    Serial.write(canal);
    Serial.write(data);

    DMXSerial.write(canal, data);
    canal=0;
    data=0;
   }
  
}

Lorsque je me met ma carte sous tension/Redémarre la carte (via le bouton rouge) et que je lance mon application, rien ne se passe et je reçois des données de ce genre sur le port série

Canal: 255 Data: 254
Canal: 255 Data: 255
Canal: 254 Data: 254

Et par conséquent, rien ne fonctionne.
MAIS, si jamais j’ouvre le moniteur série Arduino et que j’envois juste quelques données, par exemple, j’écris des 1, et que je lance le programme de tir ensuite, alors la … MAGIE, sa fonctionne !

Du coup, auriez-vous une idée de comment régler cela ? C’est plutot handicapant car pas toujours le temps de s’amuser à ouvrir un terminal série sur le pas de tir :stuck_out_tongue:

Merci :slight_smile:

hello
tu déclares BOX et tu utilises DATA.......?????

ensuite, ton prg attends de recevoir quelque chose sur la ligne série du moniteur.
s'il ne reçoit rien, il ne fait rien. (n’envoie rien vers le DMX).

donc, ce que tu décris est normal.

Salut,

C'est une erreur de copier coller pour le BOX qui devient data, tout à le meme nom :stuck_out_tongue: #Boulet

En revanche, ce n'est pas normal puisque mon programme envoie des données, mais qu"elles sont mal réceptionnées. En effet, si j'envois des données, se que je recois est:

Canal: 255 Data: 254
Canal: 255 Data: 255
Canal: 254 Data: 254

Or, ce n'est pas se qui s'envoie ! Et lorsque j'envois des données quelconque via le moniteur série arduino, ensuite les données envoyées par le programme sont recues correctement !

de ce que je comprends de ton texte et de ton prg:
lorsque tu tapes des données dans le moniteur, ta platine arduino les reçoit bien et les renvoie vers le DMX.

En revanche, ce n'est pas normal puisque mon programme envoie des données, mais qu"elles sont mal réceptionnées. En effet, si j'envois des données, se que je recois est:

non: le prg que tu nous as posté ne sais pas faire des envois tout seul. il attends que tu tapes une donnée dans le moniteur. et ensuite il la renvoie vers le DMX

et ça, tu nous dis que ça fonctionne

+1 avec dfgh
j’ai l’impression depuis le début que le “programme de tir sur le PC” , ne génère/n’envoie pas ou mal des données “séries” en sortie “acceptables”.
Il faut déjà absolument lever ce doute , l’idéal est un petit analyseur logique à qq €