I2C Verbindung-Probleme mit antworten

HALLO allerseits :slight_smile:
Da ich mich jetzt echt schon viel über diese Form 2 Arduinos miteinander zu verbinden informiert habe
und mir es bis jetzt noch nicht gelungen ist frage ich mal hier nach.

Also mein Vorstellung ist es mit einem Arduino(Master) eine Zahl an den anderen zu senden. Dieser verarbeitet dies dann in einer if-Schleife und sendet ihm die dementsprechende Information zurück

Der Master soll diese Nachricht dann in einer Variable abspeichern und im seriellen monitor ausgeben.

Ich habe das so probiert: (funktioniert nicht)

#include <Wire.h>
char c;

void setup(){
  Wire.begin(8);
  
  }
void loop(){
  Wire.onReceive(receiveEvent);
  Wire.onRequest(requestEvent);
  }
  
void receiveEvent(int howMany) {
  while (Wire.available()) { 
    char c = Wire.read(); //
             }      
     }
void requestEvent() {
  if(c=='4'){
    Wire.write("9");
    }
}
include <Wire.h>
char c;

void setup(){
  Serial.begin(9600);
  Wire.begin();
  }
  
void loop(){
  Wire.requestFrom(8, 9);
  
  if (Serial.available()){
    c = Serial.read();
    }
   
    
    if(c=='A'){
      Wire.beginTransmission(8);
      Wire.write('4');
      Wire.endTransmission();
      }
    
      
      
     while(Wire.available()){
       char r = Wire.read();
       Serial.print(r);
       }
     
      
      
  }

invisible09:
Ich habe das so probiert: (funktioniert nicht) …

IMO wäre die Kommunikation über die Serielle Schnittstelle deutlich einfacher. Du programmierst übrigens wie „Kraut und Rüben“ – schwer zu lesen, finde ich.

Gruß

Gregor

Du empfängst mit requestFrom() 9 Bytes, aber der Slave sendet nur 2 als Antwort (da du “9” statt '9 machst). Da passt irgendwas nicht. Empfange nur ein Byte und sende auch nur ein Byte.

Dann sendet du zwar 9 aber fragt ab ob du ‘A’ bekommen hast.

Außerdem willst du laut der Beschreibung erst senden und dann empfangen. Dann musst du das auch so programmieren. Und nicht erst Daten empfangen und basierend auf der Antwort etwas senden

Danke für deine nette Antwort ;) Schön wie man hier mit Anfängern umgeht. Naja ich weis dass es einfacher wäre aber ich möchte I2C benutzen. Lg

danke serenifly!