Bonjour à toutes et à tous,

Je débute sur Arduino et mon niveau en C est très poussiéreux.
Cela fait plusieurs jour que je fait des essais de communication entre deux Arduino Mega2560 via le port I2C.
Jusque là je me suis débrouillé seul mais maintenant je coince....

Voilà mon problème :
L'idée de mes travaux est de communiquer au travers de chaines de caractères.
L'Arduino Maitre envoie une requête sous forme de message ("Ready ?") à l'esclave -> Ok ça fonctionne.
L'esclave enregistre le message dans la variable (recudumaitre) -> Ok ça fonctionne.
L'esclave envoie la requête du Maitre sur sa console -> Ok ça fonctionne.
L'esclave envoie au Maitre sa réponse ("Yes Ready !") -> Ok ça fonctionne.
L'esclave envoie la valeur de la variable (recudumaitre) sur sa console -> Ça ne fonctionne pas, il n'y a que le dernier caractère...

Je n'arrive pas à comprendre si mon problème vient du fait qu'il n'y ai qu'un seul caractère dans ma variable (recudumaitre) à l'instant T, donc si je dois passer par une incrémentation des caractères ?
Ou si mon problème est d'ordre du format de la variable (recudumaitre) ?

Quelqu'un aurait-il une solution ou une piste??

Le code du 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
 
// Maitre Arduino 2560
#include <Wire.h>
const int bp = 2;    // Entrée bp
 
void setup()
{
Wire.begin();       // Init I2C maître
Serial.begin(9600);  // Init Serie
pinMode(bp, INPUT);  // Bouton poussoir envoie de msg à l'esclave
}
 
void loop()
{
int etatbp; 
etatbp = digitalRead(bp);
if(etatbp == HIGH)
{EnvoieRecoit();}
}
 
void EnvoieRecoit()
{ 
Wire.beginTransmission(0x01); // Ouvre la comm avec esclave 0x01
Wire.write("Ready ?");          // Charge la valeur à envoyer
Wire.endTransmission();       // envoie et ferme la comm avec esclave 0X01
delay(1000);
Wire.requestFrom(0x01, 11);    // recoit le retour de l'esclave, 11 bytes
while(Wire.available())
  {char retour = Wire.read();
   Serial.print(retour);}
Serial.println();
}
Le code de l'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
 
// Esclave Arduino 2560
#include <Wire.h>
int rep = 0;
char recudumaitre = "";
 
void setup()
{ Wire.begin(0x01); 
  Wire.onReceive(reception);      // fonction de lecture appellée quand un msg du Maitre est arrivé
  Serial.begin(9600);
  Wire.onRequest(requestEvent);   // fonction d'écriture appellée en réponse d'une demande du Maitre
}  
 
void loop()
{delay(100);}
 
void reception(int NbByte)
{ while(Wire.available() > 0)
    {recudumaitre = Wire.read();  // Enregistrement du message du Maitre dans la variable recudumaitre
     Serial.print(recudumaitre);} // Envoie du message du Maitre dans la console
 
  Serial.print(" : ");
  Serial.print(NbByte);
  Serial.print(" byte(s)");
}
 
void requestEvent()
{
  Wire.write("Yes Ready !"); // Répondre avec un message de 11 octets (bytes)
  Serial.print(" : recudumaitre = "); // Envoie dans la console de la valeur stockée dans la variable recudumaitre
  Serial.println(recudumaitre);
}

Console du Maitre :
Yes Ready ?

Console de l'Esclave :
Ready ? : 7 byte(s) : recudumaitre = ?