Umwandlung char* in char

Hallo zusammen

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.

Danke für alle Zaunpfähle.

Steve

Lies ein C-Tutorial über Zeiger bzw pointer
Grüße Uwe

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