stehe wie vorhin auch schon wie der Ochse vorm Berg.
Ich habe 2 Arduinos, welche über Ic2 miteinander kommunizieren mit Serial.print kann ich mir auch wunderbar das übertragene Anzeigen, das funktioniert also
Gesendet wird über
Wire.write("Deckel");
empfangen wird das ganze über
while(1 < Wire.available()) // loop through all but the last
{
char a = Wire.read(); // receive byte as a character
}
Ich muß nun irgendwie den empfangenen Text in ein char* umwandeln um dieses an eine lib-Prozedur zu übergeben.
Ich scheitere aber ständig an der Fehlermeldung das eine char* to char convertierung nicht geht.
Ich denke mein Fehler ist was banales aber ich sehe es leider nicht.
Bzw. über C Strings und Arrays. C Strings sind Null-terminierte Arrays aus char. Array-Variablen sind Zeiger auf das erste Element. Daher ist eine String Variable ein char*.
Folgendes habe ich nicht getestet, aber das geht so über Serial. Sollte theoretisch genauso auch mit I2C funktionieren.
const int BUFFER_SIZE = 21;
void loop()
{
char* received = readString();
if(received != NULL)
{
Serial.println(F("Empfangen:"));
Serial.println(received);
}
}
char* readString()
{
static byte index;
static char buffer[BUFFER_SIZE];
if(Wire.available() > 0) //while geht hier theoretisch auch in liest eventuell mehr als ein Zeichen auf einmal aus dem Puffer
{
char c = Wire.read();
if(c >= 32 && index < BUFFER_SIZE - 1)
{
buffer[index++] = c;
}
else if(c == '\n')
{
buffer[index] = '\0';
index = 0;
return buffer;
}
}
return NULL;
}
Du musst nur auf der Sender-Seite an jede Nachricht ein Linefeed anhängen. Also z.B.:
Wire.write("Deckel");
Wire.write("\n");
Damit die Empgangs-seite erkennt wann die Übertragung fertig ist. Carriage Return ist eine Alternative zu. Dann muss auf beiden Seiten \r stehen statt \n