Guten Tag. Ich habe ein Softwareproblem beim benützen des I2C Bus. Problembeschreibung:
Ich habe 2 Arduinos Mega2560 per I2C verbunden. Einer wurde als Master und der andere als Slave mit der Nummer 22 definiert. Der Master sendet einen String zum Slave. Mein Problem besteht im Slave.
Hier der receiveEvent:
//------------------------------------------------------------------------------
void receiveEvent(int anzahl)
{
i=0;
while(Wire.available()) // alle Bytes holen
{
char c = Wire.read(); // Empfangenes Zeichen als char in der
// Variablen c ablegen
empfangeneDaten = c; // und im Array empfangeneDaten ablegen
- i++; // Zaehler i = i + 1*
- }*
_ empfangeneDaten = '\0'; // String im Array mit '\0' abschließen_
* MasterDaten = String(empfangeneDaten); //Array in Kommando ablegen*
* Serial.println(MasterDaten);*
* DatenVomMaster=true; // DatenVomMaster auf Daten empfangen setzen*
* Serial.println(MasterDaten);*
}
Bis hier funktioniert es auch. Mein Problem besteht darin, dass ich den empfangenen String, der sich in der Variablen MasterDaten befindet, in der LOOP benötige. Dafür wurde die Routine DatenVomMaster auf true gesetzt. Die IF-Bedingung in der LOOP funktioniert auch, aber ich bekomme keine Daten rüber. Die Variable MasterDaten ist auf einmal nur in der LOOP ohne Inhalt. Was mache ich falsch?
Hier den Quellcode der LOOP:
//------------------------------------------------------------------------------
void loop()
{
* if (DatenVomMaster) // Sind Daten vom Master vorhanden?*
* { // Wenn ja, das Folgende ausführen*
* //Kommando = MasterDaten;*
* //Serial.print("Daten vom Master: ");*
* //Serial.println(Kommando);*
* Serial.println("----------------------------------");*
* // jetzt zuerst alle Variablen löschen*
* datensatzG = "";*
* command = "";*
* rechtslinks = "";*
* gradzahl = "";*
* lowGeschw = "";*
* highGeschw = "";*
* testByte = "";*
* cmStrecke = "";*
* datensatzG = MasterDaten; // ??????? Hier sind die Daten nicht mehr vorhanden*
* Serial.print("Empfangene Daten vom Master: ");*
* Serial.println(datensatzG);*
* // Datensatz zerlegen*
* command = (datensatzG.substring(1, 4));*
* rechtslinks = (datensatzG.substring(4, 5));*
* gradzahl = (datensatzG.substring(5, 8));*
* lowGeschw = (datensatzG.substring(8, 11));*
* highGeschw = (datensatzG.substring(11, 14));*
* testByte = (datensatzG.substring(14, 15));*
* cmStrecke = gradzahl;*
* DatenVomMaster=false; // und DatenVomMaster zurücksetzen *
* Serial.print("command: ");*
* Serial.println(command);*
* Serial.print("rechtslinks: ");*
* Serial.println(rechtslinks);*
* Serial.print("gradzahl: ");*
* Serial.println(gradzahl);*
* Serial.print("lowGeschw: ");*
* Serial.println(lowGeschw);*
* Serial.print("highGeschw: ");*
* Serial.println(highGeschw);*
* Serial.print("testByte: ");*
* Serial.println(testByte);*
* Serial.print("cmStrecke: ");*
* Serial.println(cmStrecke);*
* Serial.println("----------------------------------"); *
}
Ich bin für jede Hilfe dankbar.
Mit freundlichen Grüßen
pds14 Peter
Arduino_I2C_Slave22.ino (5.39 KB)