Wire i2c arduino uno esclave

Bonjour a tous j’ai suivit tout les tutos wire sur arduino mais je suis bloquer , je vient donc poste ici dans l’espoir de trouver une réponse.

Pour commencer je doit communiquer avec une carte maitre en i2c avec l’arduino en esclave ,je n’est aucun control de la carte maitre je peut juste communiquer avec , je cherche a remplace la carte défectueuse qui est l’esclave . L’avantage que j’ai ces que j’ai tout le protocole de communication grace a mon analyseur logique je ces donc quoi envoyer comme octet et a quel moment . Le problème étant que j’arrive pas a écrite quoi que ce soit sur le bus i2c la fonction onreceive marche nickel mais aucune réponse avec la fonction onrequest , est ce que ça ne viendrais pas de l’arduino qui ne peut pas faire les deux ? Recevoir et envoyer ? Je trouve ça illogique mais bon on ces jamais …

#include <Wire.h>

void setup() {
  Wire.begin(byte(0x28));                // join i2c bus
  Wire.onReceive(receiveEvent); 
Wire.onRequest(requestEvent);
  Serial.begin(9600);           
}

void loop() {
  
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany) {
  while (1 < Wire.available()) 
    char c = Wire.read();
    Serial.print(c);         
  }
  int x = Wire.read();    
  Serial.println(x);         
}
void requestEvent() {
  Wire.write(byte(0x83)); 
  
}

Merci beaucoup

Bonjour,

Tu as essayé de placer Wire.onReceive et Wire.onRequest dans le void loop ?

Bonjour Wario oui j’ai essayer aussi voici plus en détaille sur les image attachées le problème rencontre avec mon analyser logique.

I2c.jpg c’est ce que je devrais avoir.
I2c2.jpg c’est ce que j’ai.

On voit bien que le maître demande écrit “setup write to 0x28” qui ces bien dérouler puis le maître renvoie 0x14 + ack jusqu’à la tout va bien puis il demande une lecture “setup read to 0x28” du maître et la plus de réponse …

Normalement je suis sensée mettre un Onrequest qui est la réponse au “setup read to 0x28” et renvoyer la valeur 0x83 sans le ACK donc juste NAK mais rien.
Avez vous une idée ?
Merci

Bonjour un petit up j'ai besoin d'aide je suis coincé svp.
Merci

Bonjour,

Peux-tu essayer de placer Serial.println("RequestEvent"); dans la fonction RequestEvent afin de voir si le problème vient du fait qu'elle ne se lance pas ?

Bonjour wario c'est fait et rien n'est afficher dans le moniteur serie que la valeur 20 du read comme d'ab )=
Savez vous pourquoi ?

Merci

Up une idée ? Je suis bloquer svp

Bonsoir petite info ces sure sa vient de la fonction onrequest qui ne ce lance pas )= mais pourquoi ?

Bonjour petit up

Bonjour j'ai trouver a quoi était du le problème réellement mais pas moyen de le résoudre je m'explique.

Le bus i2c fonctionne non pas avec des condition stop en fin de transfère mais avec des "repeater start" ce que ne géré pas la bibliothèque wire en mode slave je précise , une idée du cou ?

Merci