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);
}
}
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).
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.
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);
}
}