Strings trennen

Hallo Leute,

ich habe folgendes Problem:
Ich lasse mir von zwei Arduino Mega 2560 Boards via xBees einen String auf ein drittes Arduino Mega 2560 mit xBee schicken. Die xBees sind mithilfe eines Shields auf den Boards befestigt und an den Serial1-Port angeschlossen. Nun ist mein Problem, dass das dritte Board beim Einlesen der Strings mir beide in eine Zeile packt, ich diese aber getrennt ausgeben möchte. Ist es möglich irgendwas miteinzubauen, damit das einlesende Board weiß, wann der String beendet ist?

Sender:

    String Daten = "Test";
    char* buf = (char*) malloc(sizeof(char) * Daten.length() + 1); 
    Daten.toCharArray(buf, Daten.length() + 1);
    Serial1.print(buf);
    free(buf);

Empfänger:

  if (Serial1.available()) {
    String empfDaten = Serial1.readString();
    Serial.println("empfange : " + String(empfDaten));
  }

Dazu werden gerne die Steuerzeichen CR (0x13) und/oder LF (0x10) verwendet.

Der Sende-Code ist irrsinnig. print() kann auch direkt ein String Objekt senden. Ansonsten gibt es c_str() für den Lese-Zugriff auf das interne Array eines Objekts. toCharArray() wird nur benötigt wenn man Schreibzugriff braucht.
Serial1.print(daten) und gut ist

Auch das ist völlig unnötig:

Serial.println("empfange : " + String(empfDaten));

Einfach so machen:

Serial.print("empfange :");
Serial.println(empfDaten);

Strings kann man mit einem Linefeed ('\n') abschließen. Dann kann bei dem Sender so lange einlesen bis das LF ankommt.

Danke für die schnellen Antworten. Die Strings werden aber leider noch immer zusammen eingelesen.

Empfange: Test 
Test2

Es ist lediglich ein Absatz dazwischen. Würde es getrennt eingelesen werden, würde ja noch einmal Empfange: vor Test2 kommen, oder irre ich mich da?

EDIT: Habe beide Varianten probiert, also sowohl \r, als auch \n. \r gibt mir trotzdem beides in einer Zeile aus. \n macht anscheinend nur einen Absatz dazwischen.

bamstyles:
EDIT: Habe beide Varianten probiert, also sowohl \r, als auch \n. \r gibt mir trotzdem beides in einer Zeile aus. \n macht anscheinend nur einen Absatz dazwischen.

Nach meiner Definiton von "eine Zeile" und "Absatz" (Zeilenumbruch) ist das unmöglich.

Mit dem Umbruch endet die Zeile und eine neue beginnt.

Ein Absatz "zwischen" einer Zeile ist für mich auch irgendwie schwer vorstellbar.

Die Idee ist dass du readStringUntil() verwendest um bis zu dem Endzeichen zu lesen (noch besser ist man verzichtet auf String Objekte und schreibt die Einlesefunktion per Hand). Dadurch ist das Endzeichen nicht Teil des Strings und hast du völlige Kontrolle wie du das darstellst.