Zeichen die mit Serial.write rein kommen in einen String umwandeln

Hi,

ich bin dabei ein bisschen per UDP zu spielen und möchte folgendes machen.
Per UDP kommen zeichen rein und werden per Serial.write(packet.data(), packet.length()); Seriel ausgegeben.
Das bringt mir aber nichts, ich hätte dies gerne die Zeichenfolge in einem String zur verfügung um die Daten weiter verarbeiten zu können, so nach dem Motto: Wenn String "Hallo" dann tue dies und das.

Ich bräuchte also so etwas: myString = (packet.data(), packet.length());

Wie kann ich das Realisieren?

Hallo,

dann schau mal hier rein.
Da findest du sicher etwas zu deiner Frage.

  1. Man kann auch "normale" Texte ( Zeichenketten ) weiterverarbeiten, wenn sie ein Endekennzeichen (0 oder auch '\0' geschrieben) enthalten.

  2. Wenn du Arduino-String Objekte meinst , muss die Zeichenkette auch mit 0 abgeschlossen sein, damit du daraus ein String Objekt machen kannst.

void setup() {
  byte arr[] {'a','b',0};
  Serial.begin(115200);
  Serial.println(sizeof(arr));
  String s= arr;
  Serial.println(s);
}

Ah, okay, das hilft mir denke ich weiter.

Danke

Wenn es ein "wenn dies dann das" gemacht werden soll, dann nimm doch einfach ein Byte, damit kannst du 256 "Befehle" übermitteln und du brauchst nicht erst einen "Befehl" in einen c-string zusammenknüppeln um ihn dann mit einem strcmp vergleichen zu müssen.

Ein Byte kannst du ganz einfach mit einem if bzw. viele ifs in einem switch case abarbeiten.
Und wenn du damit rechnest dass du mit 256 Befehlen nicht auskommst, dann nimm zwei Byte ...

Mit Enum kann man diese auch schön für den Menschen lesbar machen.
So könnte auch „Hallo“ für 1 im Code verwendet werden.

... und wenn man die enum in eine externe .h Datei gibt und in ein library Verzeichnis speichert, kann man sogar zwei separate Sketche machen einen für den Sender, einen für den Empfänger jeweils die gleiche .h includieren und beide haben die gleiche enum zur Verfügung.

1 Like

Wenn es nur eine Handvoll (oder ca. ein Dutzend) Befehle sind, kannst du dir sogar einzelne (ascii-)Buchstaben dafür ausdenken, die sind auch direkt menschenlesbar und genauso einfach in einem if oder switch abfragbar.

Kann natürlich auch mit enum kombiniert werden
enum Cmd { SAVE='s' , CLEAR='c' , HALLO='h' , HELP='?'};

Noch besser wäre, enum class zu verwenden...

ich würde sagen mindestens 26 klein +26 groß, 10 Ziffern, die Standard ASCII Zeichen eben...
:wink:

Da braucht es dann eine Tabelle, die einem das Auswendiglernen (welcher Buchstabe bedeutet was) erspart/erleichtert. Dann kann man auch gleich alle 256 möglichen Werte eines Bytes nehmen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.