Richtige Länge von Char überprüfen, ggf Char löschen

Hallo,

ich habe folgendes Problem. Ich muss einen Zeichencode mit 13 Stellen einlesen. Das habe ich bislan folgendermaßen gemacht:
char Einlesen [13];

while (Serial.available() <= 12) {
}
Serial.readBytes(Einlesen, 13) ;

Nun hat sich aber gezeigt, dass manchmal Fehler bei der Übertragung zum Arduino passieren, dh manchmal werden mehr oder weniger Zeichen als 13 zum Arduino gesendet.
Wenn weniger Zeichen als 13 übertragen werden dann bleibt der Ardunio ewig in der While schleife hängen. Wenn mehr als 13 gesendet werden, dann verarbeitet der Arduino die ersten 13 Zeichen und das 14. Zeichen merkt er sich aber und setzt es vor die nächste Zeichenkette, so dass diese nicht richtig verarbeitet wird.

Ich weis nicht wirklich wie ich das realisieren kann, dass nur wenn 13 Zeichen übertragen werden der Arduino die Zeichen verarbeitet. Bei zu vielen oder zu wenigen Zeichen soll der Arduino den Zahlencode löschen und einfach darauf warten, dass ein neuer Zeichencode gesendet wird.

Wäre sehr dankbar für Hilfe.

while (Serial.available() <= 12) { ist schon mal nicht günstig da die schleife solange abgearbeitet wird bis ber buffer emhr als 12 Zeichen hat.

Du mußt die Zeichen aus dem Buffer herausholen solange Serial.available() größer als 0 ist. Die Endbedingung der while-Schleife kannst du die vergangene Zeit nehmen.

Grüße Uwe

Wie kann ich den Buffer löschen, wenn da noch Daten vom vorherigen Ablauf drin sind? Geht das irgendwie?

Also ich hab 14 Zeichen eingegeben. Dann werden 13 abgeholt und eine Zahl ist noch im Buffer. Wie könnte ich die löschen?

Ich würde jedes Zeichen sofort lesen.
Wenn eine zeitlang kein Zeichen mehr gekommen ist, aber noch keine 13 Zeichen da sind, kann die Fehlerbehandlung den Schreibzeiger wieder auf 0 stellen und so den abgebrochenen Text verwerfen.

Ausserdem - wenn lesbare Zeichen übertragen werden -
würde ich char Einlesen [14]; definieren, und eine Endekennung ('\0') anhängen.