Communication serie entre arduino

Bonjour,

je cherche à faire communiquer 2 arduino entre eux.
Entre 2 UNO, pas de problème.
Mais entre un UNO et un MEGA, seule le sens MEGA vers UNO fonctionne !!! et ce, quelques soient les pins utilisées.
J’ai donc essayé plusieurs ports (19,18) , (17,16) et même (31,30) avec toujours la même anomalie.
J’ai aussi essayé avec 2 cartes MEGA differentes… toujours le même problème : dans le sens MEGA vers UNO uniquement…

Là, je sèche…

Quelqu’un aurait-il une idée???

Merci

Voici le code:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX     // Pour UNO
//SoftwareSerial mySerial(19, 18); // RX, TX    // pour mega port 1 _ fonctionne en MEGA vers UNO
//SoftwareSerial mySerial(31, 30); // RX, TX      // pour mega port 2 _ fonctionne en MEGA vers UNO

char chaine[20],c;
int i;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);

  // set the data rate for the SoftwareSerial port
  mySerial.begin(38400);

}

void loop() // run over and over
{
  if (mySerial.available()){
    Serial.print("recu    : ");
    for(i=0; i<20; i++)chaine[i]=0;
    i=0;
    while (mySerial.available()>0) {
        delay(10);
        c = mySerial.read();
        chaine[i++] = c;
    }
    Serial.println(chaine);
  }

    
  if (Serial.available()){
    Serial.print("envoyée : ");
    for(i=0; i<20; i++)chaine[i]=0;
    i=0;
    while (Serial.available()>0) {
        delay(10);
        c = Serial.read();
        chaine[i++] = c;
    }
    Serial.println(chaine);
    mySerial.write(chaine);
  }
}

Bonjour,

Seules certaines pins peuvent être utilisées sur la mega pour SoftwareSerial

Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

Source

Pourquoi utiliser SotfwareSerial sur la mega alors qu'elle dispose de 4 ports série.

kamill:
Pourquoi utiliser SotfwareSerial sur la mega alors qu'elle dispose de 4 ports série.

Le Mega dispose de 4 ports série : voir ici en natif. Ils s'appellent Serial (pins 0 et 1, à utiliser pour la COM avec le PC et la console série), Serial1, Serial2 et Serial3.

Si tu choisis Serial1, pins 19(RX), 18(TX), tu fais comme pour Serial, avec

Serial1.begin();
Serial1.available()
Serial1.println();
etc.

OK, OK, OKey

oui, ça fonctionne en utilisant les ports natifs de la MEGA.

donc, simplement remplacer “mySerial” par “Serial1”

Un peu trop simple pour moi, j’ai d’abord essayer entre 2 UNO avant de le faire fonctionner entre ma MEGA déjà instrumenté (Ecran TFT, CLOCK, I2C) parce que je trouvait ça plus simple.

Puis je suis passé à ma MEGA et là PAF rien. je me suis dit qu’il y avait des problèmes avec les composants déjà installé, d’où l’essai avec ma 2ème carte MEGA, et là RE-PAF.

Mais avec les ports natifs (quel qu’ils soient) ça fonctionne.

JE redonne le code si ça peut aider quelqu’un.

Super merci à vous.

#include <SoftwareSerial.h>

char chaine[20],c;
int i;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);

  // set the data rate for the SoftwareSerial port
  Serial1.begin(38400);

}

void loop() // run over and over
{
  if (Serial1.available()){
    Serial.print("recu    : ");
    for(i=0; i<20; i++)chaine[i]=0;
    i=0;
    while (Serial1.available()>0) {
        delay(10);
        c = Serial1.read();
        chaine[i++] = c;
    }
    Serial.println(chaine);
  }

    
  if (Serial.available()){
    Serial.print("envoyée : ");
    for(i=0; i<20; i++)chaine[i]=0;
    i=0;
    while (Serial.available()>0) {
        delay(10);
        c = Serial.read();
        chaine[i++] = c;
    }
    Serial.println(chaine);
    Serial1.write(chaine);
  }
}

Cool. Tu peux enlever le #include qui ne sert plus à rien