Hallo,
mein Programm liest serielle Strings ein und soll bei bestimten Strings (Befehlen) reagieren.
Es können kurze Befehle (hier max. 40 Zeichen) kommen, z.B. "test" der dann entsprechend erkannt werden soll oder auch
andere (eventuell sehr lange) Strings die zu verwerfen sind, aber natürlich das Programm nicht irgendwie überfordern sollen.
Das Ende eines String ist jeweils erreicht wenn eine kurze Pause im seriellen Datenstrom eintritt, das "böse" delay in meinem Sketch:
...
void loop() // Hauptprogramm
{
char serstring[41]; // Puffer für String
char c; // 1 Zeichen des String
int i=0; // Zähler für Stringlänge
memset(serstring,0,sizeof(serstring)); // Puller löschen
if (Serial.available())
{
delay(100); // Kurz warten auf weitere Zeichen
while (Serial.available() && (i<40))
{
c=Serial.read();
if (c>31) // Nur ASCII >31 einlesen (kine Steuerzeichen)
{
serstring[i] = c;
i++;
}
}
}
if (strcmp(serstring,"test")==0)
{
Serial.println("test eingelesen");
// Mach noch dies und das
}
else if (strcmp(serstring,"")!=0)
{
Serial.print("anderer String eingelesen: ");
Serial.println(serstring);
}
}
...
Prinzipiell läuft das so. Die kurzen Strings (Befehle) werden erkant, bei längeren Datenströmen habe ich aber den Eindruck daß sich das irgendwie verschluckt, vermutlich wegen dem Delay und dem vermutlich folgenden Überlauf des UART Puffer...
Hat hier jemand eine Idee wie ich das Delay wegbekomme und sauber programmieren kann?
Danke im Voruas,
Christian