Ich bevorzuge eigentlich das Lesen einzelner Zeichen, die ich dann selbst in Array oder string hinzufüge.
+ Man kann da einen Timeout einbauen
+ Falls die Gegenseite mal das \n vergisst, kann man aufhören wenn es zuviel wird (die Teensy Implementierung von readStringUntil hat im Gegensatz zu Arduino eine einstellbare Maximallänge)
+ Man kann auch Zeilenenden wie \r\n beachten
+ Steuerzeichen kann man ignorieren, z.B. Falls da jemand auf der Gegenseite von Hand tippt
+ Spezialprotokolle wie das obige mit STX kann man gut behandeln, einfach erst mit dem Lesen anfangen, wenn man ein Startzeichen gesehen hat
- - - Aktualisiert - - -
Ok, immerhin einen Timeout haben sie bei Arduino
beim Teensy sieht die Funktion so ausCode:String Stream::readStringUntil(char terminator) { String ret; int c = timedRead(); while (c >= 0 && c != terminator) { ret += (char)c; c = timedRead(); } return ret; }
Das ist ist ja fast wie bei dem Bug in der Arduino map Funktion ...Code:String Stream::readStringUntil(char terminator, size_t max) { String str; size_t length = 0; while (length < max) { int c = timedRead(); if (c < 0) { setReadError(); break; // timeout } if (c == 0 || c == terminator) break; str += (char)c; length++; } return str; }







Zitieren

Lesezeichen