transmission i2c

Bonour,
Je cherche à communiquer entre 2 arduino: Master 'Arduino mega 2560', esclave 'Arduino uno R3'
Pour ça j'utiliser le bus i2c.
Je parcoure sans sucés les moteur de recherche pour trouver des infos.
Je me suis également inspiré d'exemples donnés avec la bibliothèque 'wire'.

Pour la communication master vers esclave pas de problèmes.
Pour la communication esclave vers maitre j'envoie '401', je reçois 'ÿÿ'.

Pouvez vou m'aider à y voir plus clair?

Le code du master:

int Ecoute()
{
  Wire.requestFrom(10,3);      // recois 3 char de l’esclave #10
  Serial.print("wire request? ");
  Serial.println(Wire.requestFrom(10,3)); 
Serial.print("Ecoute: ");
 while (Wire.available()) 
 {
    char c = Wire.read();     // receive un char
    Serial.print(c);          
  }
//Serial.print(c); 
  delay(500);

Le code de l'esclave:

Transfert="401";
  char Transfert2 [Transfert.length() + 1];                  // tableau de char de la taille du String Transfert+1 (caractère de fin de ligne)
  Transfert.toCharArray(Transfert2, Transfert.length() + 1); // récupère Transfer2 dans le tableau de char
  
  Serial.print("Transfert: ");
  Serial.println(Transfert2);
  Wire.write(Transfert2);                                    // demande l'heure au maitre(code 401)
  
  delay(100);

Merci pour votre aide précieuse.

Il n'est pas utile d'aller bien loin : l'IDE est livrée avec un exemple maître et un exemple esclave.
As tu commencé avec eux ?

Commence avec des applications rudimentairement simples : lire l'état d'une entrée ou allumer une del par exemple.

oui, je les ai regardé, essayé, modifie. et je reçois des 'ÿÿ' au lieu de '401'.

Je n'arrive pas à déterminer ce que tu as déjà fait.
Moi, pour vérifier que j'ai bien compris ce qu'il faut faire je ferai l'exemple suivant :

Sur l'esclave D10 reliée avec D13
Envoi d'un ordre pour allumer D13.
Large pause pour éviter des effets secondaires de temps de lecture et d'écriture (on ne s'embête pas en phase de mise au point -> ceinture + bretelles)
Envoi d'un ordre pour lire D10
Large pause
Est ce que D10 = D13 ?

Tant que cela ne fonctionne pas inutile d'aller plus loin.

Merci poue votre aide.

J'ai trouvé, en fait sur l'esclave je transmettais le message sans attendre la demande du maitre 'Wire.onRequest'.

J'ai un nouveau problème:
Pour les demande entre les 2 arduino j'ai crée des codes à 3 chiffres ex'401' qui sont écrit dans un tableau de char. Je ne parviens pas à afficher l’intégralité sur le moniteur série. Je peu afficher séparément les valeur du code mais pas l’intégralité:
Serial.println(reception[1]); //affiche '4'
Serial.println(reception[2]); //affiche '0'
Serial.println(reception[3]); //affiche '1'

Serial.println(reception); //affiche ' '

Je vous donne mon code:

//Ecoute
int Ecoute()
{
  Wire.requestFrom(10, 3);     // recois 3 char de l'eslave #10
  l = Wire.available();
  char reception[3];

  Serial.print("Ecoute: ");
  while (Wire.available())
  {
    char c = Wire.read();     // receive un char
    m = Wire.available();
    m = l - m;
    reception[m] = c;
    Serial.println(reception[m]);
  }

  Serial.println(reception);

  delay(500);
}

Encore merci pour votre aide.

Serial.println(reception[1]); //affiche '4'
Serial.println(reception[2]); //affiche '0'
Serial.println(reception[3]); //affiche '1'

C'est normal et cela n'a rien à voir avec les fonctions arduino : c'est du C :

reception et reception[i]

sont deux variables différentes.

Il faut suivre des tutos et des cours de C/C++ comme sur OpenClassoom par exemple.