Bonjour et merci de prêter attention à ce message,
Je suis débutant dans l’Arduino et j'essaye actuellement de coder des programmes afin de faire communiquer deux cartes Arduino (UNO comme maitre et NANO comme esclave) entre elles, le tout consistant à ce qu'elles s'échange des informations entre elles. Je me trouve cependant confronté à quelques difficultés...

Tout d'abords voila le but de ce système:
- un code est tapé sur la UNO (via un clavier); et un message de formalité s'affiche quant à lui sur un écran LCD également connécté.
- si le code est bon, la UNO envoie un message à la NANO, et cette dernière choisit l'action à faire en fonction de ce message qu'elle reçoit.
- L'action (qui en l’occurrence consiste à créer trois variables représentant un chiffre aléatoire entre 0 et 255) est alors effectué, puis envoyé à la UNO (les trois variables doivent être envoyées).
- La UNO doit alors s'approprier ces information et les attribuer trois de ses variables.

Là où le problème survient est lors de la communication de l'esclave vers le maitre (mais la communication du maitre vers l'esclave à elle l'air de marcher...).

Les codes en questions : (je m'excuse de l'intégrer au message mais je ne sais pas le faire autrement)

* Maitre
----------

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <Wire.h>
 
#define Slave 0x01
 
#include <LiquidCrystal.h>
int rs = 13;
int en = 12;
int d4 = 7;
int d5 = 6;
int d6 = 5;
int d7 = 4;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
#define ligne_0 0
#define ligne_1 1
#define ligne_2 2
#define ligne_3 3
 
#define colonne_0 8
#define colonne_1 9
#define colonne_2 10
#define colonne_3 11
 
int Na;
int Nb;
int Nc;
 
void setup() {
 
  lcd.begin(16, 2);
  lcd.cursor();
 
  pinMode(ligne_0, OUTPUT);
  pinMode(ligne_1, OUTPUT);
  pinMode(ligne_2, OUTPUT);
  pinMode(ligne_3, OUTPUT);
 
  pinMode(colonne_0, INPUT_PULLUP);
  pinMode(colonne_1, INPUT_PULLUP);
  pinMode(colonne_2, INPUT_PULLUP);
  pinMode(colonne_3, INPUT_PULLUP);
 
  Wire.begin();
}
 
void loop() {
 
 lcd.print("Que voulez vous");
 lcd.setCursor(0 ,1);
 lcd.print("faire ?");
 int menu = oui_non();
 
 if(menu == 'A') {
 
    lcd.clear();
    lcd.print("every things OK");
 
    Wire.beginTransmission(Slave);
    Wire.write(1);
    Wire.endTransmission();
    Wire.requestFrom(Slave, 1);
    while(1 < Wire.available()) {
      Na = Wire.read();
    }
    Na = Wire.read();
 
    Wire.requestFrom(Slave, 1);
    while(1 < Wire.available()) {
      Nb = Wire.read();
    }
    Nb = Wire.read();
 
    Wire.requestFrom(Slave, 1);
    while(1 < Wire.available()) {
      Nc = Wire.read();
    }
    Nc = Wire.read();
 
    Wire.beginTransmission(Slave);
    Wire.write(5);
    Wire.endTransmission();
 
    lcd.clear();
    lcd.print(Na);
    delay(2000);
    lcd.setCursor(0,1);
    lcd.print(Nb);
    delay(2000);
    lcd.setCursor(0,1);
    lcd.print(Nc);
    delay(2000);
    lcd.clear();
   }
}
 
char oui_non() {
  char bouton = NULL;
  do {
    bouton = bouton_presse();
  } while(bouton == NULL);
 
  delay(100);
  while(bouton_presse() != NULL);
  delay(100);
 
  return bouton;
  lcd.clear();
}
 
char bouton_presse() {
 
  const char boutons[4][4] = {
    'A','B','C','D',
    '3','6','9','#',
    '2','5','8','0',
    '1','4','7','*',
  };
 
 
  for(int ligne=0;ligne<4;ligne++) {
 
    digitalWrite(ligne_0, ligne == 0 ? LOW : HIGH);
    digitalWrite(ligne_1, ligne == 1 ? LOW : HIGH);
    digitalWrite(ligne_2, ligne == 2 ? LOW : HIGH);
    digitalWrite(ligne_3, ligne == 3 ? LOW : HIGH);
 
    int etat_colonne_0 = digitalRead(colonne_0);
    int etat_colonne_1 = digitalRead(colonne_1);
    int etat_colonne_2 = digitalRead(colonne_2);
    int etat_colonne_3 = digitalRead(colonne_3);
 
    if(etat_colonne_0 == LOW) {
    return boutons[ligne][0];
    }
    if(etat_colonne_1 == LOW) {
    return boutons[ligne][1];
    }
    if(etat_colonne_2 == LOW) {
    return boutons[ligne][2];
    }
    if(etat_colonne_3 == LOW) {
    return boutons[ligne][3];
    }
  }
 
  return NULL;
 
}
----------

* esclave

----------

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <Wire.h>
 
#define Slave 0x01
 
int option;
byte impression;
 
void setup() {
  Wire.begin( Slave);
  Wire.onReceive(commande);
  Wire.onRequest(transmi);
 
  Serial.begin(9600);
  Serial.print("Hey !?");
}
 
 
void loop() {
 commande;
 
  if(option == 1) {
    Serial.print("Salut !!!");
    byte N1 = random(0,255);
    impression = N1;
    transmi;
    Serial.println(N1);
 
    Serial.print("Salut !!");
    byte N2 = random(0,255);
    impression = N2;
    transmi;
    Serial.println(N2);
 
    Serial.print("Salut !");
    byte N3 = random(0,255);
    impression = N3;
    transmi;
    Serial.println(N3);
 
  }
  else {
    if(option == 5){
      option = 'stop';
    }
  }
}
 
char commande() {
  if(Wire.available() > 0) {
  option = Wire.read();
  }
}
 
char transmi() {
  Wire.write(impression);
}
----------


En espérant que vous pourrez m'aider car j'avoue avoir tenté tout ce qui me paraissait pouvoir marcher...