Problème de communication entre deux cartes Arduino pour un projet

Bonjour !
Nous sommes deux étudiants travaillant sur un projet de SI qui se termine dans une semaine. Or, nous avons un gros problème : nous utilisons deux cartes Arduino : une Mega et une UNO. Nous n'arrivons pas à faire communiquer les cartes. Nous avons connaissance de TX/RX par exemple, mais nous avons beaucoup de mal à écrire un code qui marche... Voici notre code actuel :

#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
int E1 = 6;
int M1 = 7;
int E2 = 5;                         
int M2 = 4; 
int lcd_key     = 0;
int adc_key_in  = 0;
int speakerPin = 31; 
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
#define btnRST    6
int read_LCD_buttons()

{adc_key_in = analogRead(0);      

 if (adc_key_in > 1000) return btnNONE; 
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 250)  return btnUP; 
 if (adc_key_in < 450)  return btnDOWN; 
 if (adc_key_in < 650)  return btnLEFT; 
 if (adc_key_in < 850)  return btnSELECT; }


void setup() 
{ 
    pinMode(M1, OUTPUT);   
    pinMode(M2, OUTPUT); 
    pinMode (speakerPin, OUTPUT); 
    lcd.begin(16, 2);             
    lcd.setCursor(0,0);
    lcd.print("Bonjour,tri?"); 
}

void loop()
{
           
 lcd.setCursor(0,1);            
 lcd_key = read_LCD_buttons();  

 switch (lcd_key)               
 {
   case btnSELECT:
     {  
     int value = 255;     
     lcd.print("LUNDI ");
     lcd.clear();
     lcd.print("En cours");
     digitalWrite(M1,LOW);   
     digitalWrite(M2,LOW);       
     analogWrite(E1, value);   
     analogWrite(E2, value);  
     analogWrite (speakerPin, 1); // Activer le buzzer
     delay (30000) ; // Pendant 30s
     break;
     }
   case btnLEFT:
     {
     int value = 255; 
     lcd.print("MARDI   ");
     lcd.clear();
     lcd.print("En cours");
     digitalWrite(M1,LOW);   
     digitalWrite(M2,LOW);       
     analogWrite(E1, value);   
     analogWrite(E2, value);  
     analogWrite (speakerPin, 1); // Activer le buzzer
     delay (30000) ; // Pendant 30s
     break;
     }
   case btnUP:
     {
     int value = 255;     
     lcd.print("MERCREDI    ");
     lcd.clear();
     lcd.print("En cours");
     digitalWrite(M1,LOW);   
     digitalWrite(M2,LOW);       
     analogWrite(E1, value);   
     analogWrite(E2, value);  
     analogWrite (speakerPin, 1); // Activer le buzzer
     delay (30000) ; // Pendant 30s
     break;
     }
   case btnDOWN:
     {
     int value = 255;     
     lcd.print("JEUDI  ");
     lcd.clear();
     lcd.print("En cours");
     digitalWrite(M1,LOW);   
     digitalWrite(M2,LOW);       
     analogWrite(E1, value);   
     analogWrite(E2, value);  
     analogWrite (speakerPin, 1); // Activer le buzzer
     delay (30000) ; // Pendant 30s
     break;
     }
   case btnRIGHT:
     {
     int value = 255;  
     lcd.print("VENDREDI");
     lcd.clear();
     lcd.print("En cours");
     digitalWrite(M1,LOW);   
     digitalWrite(M2,LOW);       
     analogWrite(E1, value);   
     analogWrite(E2, value);  
     analogWrite (speakerPin, 1); // Activer le buzzer
     delay (30000) ; // Pendant 30s
     break;
     }
     case btnNONE:
     {
     lcd.print(" ");     
     break;
     }
 }

}

L'écran LCD et le buzzer se trouvent sur la MEGA, et les drivers moteurs se trouvent sur la UNO. Toute aide est la bienvenue, mais sans vouloir sembler impatient, le temps nous est compté :slight_smile:

Merci d'avance.

et la partie transmission est où?

C'est à dire ? (Nous avons relié les deux ports TX RX si ça que vous voulez dire)

sungjung:
C'est à dire ? (Nous avons relié les deux ports TX RX si ça que vous voulez dire)

c'est bien, mais la partie du code pour la transmission, elle est où?
aussi bien maitre qu'esclave

Bonjour
Je peux pas aider, soyons honnêtes... mais je vois des buzzers qu'on active, puis un delay(30000).
Ils arrêtent de chanter quand? Tu ne mets pas le pin sur LOW ?

surtout qu'un premier topic a été ouvert ICI
toujours sans code ni montage

La partie transmission dans le code, c'est justement ce qui nous manque !

  • dans ta fonction read_LCD_buttons() le cas 850 < adc_key_in < 1000 n'est pas traité, la fonction ne renvoie rien. Le compilateur devrait mettre au moins un warning.
  • ensuite
lcd.print("LUNDI ");
lcd.clear();

à quoi ça sert d'afficher un texte pour l'effacer immédiatement ?

  • le code de loop() est particulièrement inefficace, tu fais 5 fois la même chose (vu la remarque précédente). Tu devrais regrouper ces traitements dans une fonction.
  • pour la communication série
  • ne pas oublier qu'il faut croiser RX et TX
  • voir la doc de l'objet Serial ici

Nous avons déjà regardé la doc de l'objet Serial, mais nous n'y comprenons vraiment rien ! Pour information, il s'agit de notre dernière séance, donc nous sommes un peu pressés

sungjung:
Nous avons déjà regardé la doc de l'objet Serial, mais nous n'y comprenons vraiment rien ! Pour information, il s'agit de notre dernière séance, donc nous sommes un peu pressés

Tout est dit alors...