communication entre 3 arduino utilisant la communication série

bonjour
je veux communiquer 3 arduinos. une soit relier au pc pour lire les données sur le moniteur série .
les deux autres arduino sont liées à la premier arduino et envoie les données des capteur vers l'arduino relié au pc .
voici les trois code des trois cartes.
les codes des deux cartes sont pour lire le courant a partir d'un capteur de courant ASC712.
le problème c'est que je reçois que la données d'une seul carte et aucun données viennent de la deuxième carte !!!!
aucune idée pour définir la problème
merci d'avance

master.ino (817 Bytes)

acs712.ino (1.26 KB)

slave_2.ino (1.29 KB)

Bonjour sakloub

Les masses des 3 cartes sont-elles bien reliées ?

Cordialement,
bidouilleelec

boujour
oui ils sont bien relier!!
toujours j'obtiens les données d'une seul carte
cordialement

A mon avis, c'est normal. Tu crées des liaisons série sans les distinguer l'une de l'autre.

Je ne sais pas de quel matériel tu disposes, alors je devine par rapport à la lecture des codes. Si tu utilises des communications Bluetooth, as-tu appairé les modules BT entre émetteurs et récepteur ?

Sinon, quels sont les modules utilisés pour la communication ?

merci pour votre réponse
mon matériels utilisés sont trois arduino uno et la communication filaire en créant des port série logiciel
cordialement

Bonjour,

Deux liaisons SoftwareSerial ne peuvent recevoir en même temps.
Il faut que tu précises celle qui doit recevoir.

bonjour
j'ai fais une delay entre les deux données !
est ce que c'est comme ça on définir la port utilisé ?

Non.
On utilise listen()

merci je vais le test maintenant
cordialement

Ta gestion des liaison séries présente des lacunes:

  • tu ne transmets qu'un byte et non un flottant
  • tu ne testes pas si tu as reçu quelque-chose avant de le traiter
    Je te conseille la lecture du tuto de JML

Comme les émissions des deux cartes se font de manière asynchrone, tu n'arriveras pas à gérer les deux liaisons via SoftwareSerial sur le récepteur sans perdre des messages (mais peut être n'est ce pas trop grave).

Tu devrais plutôt t'orienter vers une communication I2C.

Tu ne peux pas créer deux ports SoftwareSerial.

Bonjour Vbol,

Vbloc:
Tu ne peux pas créer deux ports SoftwareSerial.

Mais si.
Mais voir le post #5 (et les autres) de kamill .

Cordialement,
bidouilleelec

bonjour
j'ai changé mon code en utilisant la fonction "listen" mais maintenant je ne reçois aucune données sur le port série !!! notant que la led Tx de l'arduino clignote !!
voici le code

master.ino (1008 Bytes)

bonjour
pas de réponse !!

hi
je demande si quelqu'un peut me guider de définir le problème ! c'est très urgent!!
merci

Si tu veux avoir des réponses mets ton code entre balises de code

Si tu veux avoir quelque chose qui fonctionne "à peu près" tu peux faire ça.

void loop() {
  mySerial.listen();
  while (mySerial.available() == 0); // attente réception sur mySerial
  float  c = mySerial.read();

  float  Voltage = (c * 5.0) / 1023.0;
  //Serial.println(Voltage);
  float VRMS = (Voltage / 2.0) * 0.707;
  // Serial.println(g);
  float AmpsRMS = (VRMS * 1000) / 185;
  Serial.print(AmpsRMS , 3);
  Serial.println(" Amps RMS");
  ////////////////////////////////
  //mySerial.end();
  Serial.println();

  mySerial2.listen();
  while (mySerial2.available() == 0); // attente réception sur mySerial2
  float  c2 = mySerial2.read();
  float  Voltage2 = (c2 * 5.0) / 1023.0;
  //Serial.println(Voltage);
  float VRMS2 = (Voltage2 / 2.0) * 0.707;
  // Serial.println(g);
  float AmpsRMS2 = (VRMS2 * 1000) / 185;
  Serial.print(AmpsRMS2 , 3);
  Serial.println(" Amps RMS2222");
  //mySerial2.end();
  Serial.println();
}

Mais si tu veux avoir quelque chose qui fonctionne vraiment relis mon message #9

merci pour votre réponse :slight_smile: :slight_smile:
j'ai essayé de faire comme vous indiquez je reçois des valeurs fixes de l'ordre de z pour les deux cartes
mème si je varie le courant!!

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); 
SoftwareSerial mySerialtwo(8,9);
void setup() {
    
  Serial.begin (9600);
  mySerial.begin(9600);
  mySerialtwo.begin(9600);
}

void loop() {

 mySerial.listen();
 while (mySerial.available()==0)
  {
   // mySerialtwo.end();
 float  c = mySerial.read();
 
 float  Voltage = (c * 5.0)/1023.0;
 //Serial.println(Voltage);
 float VRMS = (Voltage/2.0) *0.707;  
// Serial.println(g);
 float AmpsRMS = (VRMS * 1000)/185;
 Serial.print(AmpsRMS , 3);
 Serial.println(" Amps RMS");
 Serial.println();
 delay(1000);
 ////////////////////////////////
 
  }
  
  //Serial.println();
   
  mySerialtwo.listen();
  while (mySerialtwo.available()==0)
  {
   // mySerial.end();
  float  c2 = mySerialtwo.read(); 
  float  Voltage2 = (c2 * 5.0)/1023.0;
 //Serial.println(Voltage);
  float VRMS2 = (Voltage2/2.0) *0.707;  
// Serial.println(g);
  float AmpsRMS2 = (VRMS2 * 1000)/185;
  Serial.print(AmpsRMS2 , 3);
  Serial.println(" Amps RMS2222");
  Serial.println();
  delay(1000);
 
  } 
   
  //Serial.println();
  
  //Serial.println(c);
    
}

Ce n'est pas étonnant, tu n'attends pas la réception.
Ce n'est pas le programme que je t'ai proposé.
C'est

 while (mySerial.available() == 0); // attente réception sur mySerial

et non

 while (mySerial.available()==0)
 {
    ...

merci bien...
il fonctionne
cordialement