Bonjour bonjour,
Cela fait un petit moment que je survole le forum pour résoudre mes problèmes et j'ai toujours trouvé les réponses à mes questions jusque là.
J'ai à présent un problème dont je ne comprend pas la cause et je n'ai rien trouvé ici.
J'ai réalisé un montage afin de faire communiquer deux cartes arduino (Uno tout d'abord en attendant mes livraisons) par le biais de modules RS485.
Tout fonctionne normalement, les informations transmises/reçues sont les bonnes etc donc le code est ok.
Je voudrais maintenant faire communiquer deux cartes arduino Mega entre elles de la même façon mais cela ne fonctionne pas. Je choisis bien évidemment le bon port et je change le type de carte.
Ce qui est drôle, c'est que si je mets un Mega en Maître et un Uno en Esclave, ça fonctionne parfaitement, mais pas l'inverse, et pas non plus avec 2 Mega.
Auriez-vous une idée de ce qui cause ce problème ?
Code partie Maître :
#include <SoftwareSerial.h>
/***** COM *****/
#define RX 3 //Serial Receive pin
#define TX 4 //Serial Transmit pin
#define Dir 2 //RS485 Direction control
#define COMTx HIGH
#define COMRx LOW
#define LEDA 13
SoftwareSerial COM(RX, TX); //RX, TX
/***** INFORMATIONS *****/
/***** VARIABLES *****/
int BoutonTIR = 5; //BoutonTIR défini sur la broche 5
int ClefTIR = 6; //ModeTir défini sur la broche 6
int ClefTEST = 7; //ModeTest défini sur la broche 7
int LEDTir = 9; //LEDTest défini sur la broche 9
int Commande;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//attachInterrupt(0, InterruptionTEST, LOW);
pinMode(BoutonTIR, INPUT_PULLUP); // Pin 5 Définie en entrée
pinMode(ClefTIR, INPUT_PULLUP); // Pin 6 Définie en entrée
pinMode(ClefTEST, INPUT_PULLUP); // Pin 7 Définie en entrée
pinMode(LEDTir, OUTPUT); // Pin Définie en sortie
pinMode(Dir,OUTPUT);
COM.begin(9600); //Détermine la fréquence de donnée
Serial.println("Mallette Commande");
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(Dir,COMTx); //Activer la transmission
if(digitalRead(BoutonTIR) == LOW){
Serial.print("Commande envoyée : ");
if(digitalRead(ClefTEST) == LOW){
Serial.println("1");
Eteindre();
digitalWrite(LEDTir, LOW);
}
else if(digitalRead(ClefTIR) == LOW){
Serial.println("2");
Allumer();
digitalWrite(LEDTir, HIGH);
}
}
}
void Allumer(){
COM.write(2);
}
void Eteindre(){
COM.write(1);
}
Code partie Esclave :
#include <SoftwareSerial.h>
#define RX 3 //Serial Receive pin
#define TX 4 //Serial Transmit pin
#define Dir 2 //RS485 Direction control
#define COMTx HIGH
#define COMRx LOW
#define LEDA 13
SoftwareSerial COM(RX, TX); //RX, TX
int ClefTEST = 5; //ClefTEST défini sur la broche 5
int ClefTIR = 6; //ClefTIR défini sur la broche 6
int BoutonTEST = 7; //BoutonTEST défini sur la broche 7
int LEDTir = 9; //LEDTir défini sur la broche 9
int Commande;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(BoutonTEST, INPUT_PULLUP); //BoutonTEST Définie en entrée
pinMode(ClefTEST, INPUT_PULLUP); //ClefTEST Définie en entrée
pinMode(ClefTIR, INPUT_PULLUP); //ClefTIR Définie en entrée
pinMode(LEDTir, OUTPUT); //LEDTir Définie en sortie
pinMode(Dir,OUTPUT);
COM.begin(9600); //Détermine la fréquence de donnée
Serial.println("Mallette Puissance");
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(Dir,COMRx); //Activer la réception
if(COM.available()){
Commande = COM.read();
Serial.print("Commande reçue : ");
Serial.println(Commande);
if(Commande == 1){
digitalWrite(LEDTir, LOW);
}
else if(Commande == 2){
digitalWrite(LEDTir, HIGH);
}
}
}
Sylenix