Hallo zusammen,
ich habe ein Problem mit der Mehrfacheingabe von Werten im seriellen Monitor.
Wenn ich den folgenden Code in einem Sketch ganz alleine verwende, funktioniert dieser einwandfrei. Sobald ich diesen aber versuche in meinen bestehenden Code zu integrieren, ist das Ergebnis unbrauchbar und immer unterschiedlich.
Ich versuche mehrere Werte durch den seriellen Monitor einzulesen und somit weiter zu verarbeiten.
const unsigned int READ_BUFFER_SIZE = 21; //Platz für 20 Zeichen + Terminator
void loop(){
char* str = readLine(Serial); //liefert einen Zeiger ungleich 0 wenn das LF eingelesen wurde
if (str != nullptr)
{
Serial.print("Eingelesen: ");
Serial.println(str);
int value1 = atoi(strtok(str, ","));
int value2 = atoi(strtok(nullptr, ","));
int value3 = atoi(strtok(nullptr, ","));
Serial.println(value1);
Serial.println(value2);
Serial.println(value3);
}
}
char* readLine(Stream& stream)
{
static byte index;
static char buffer[READ_BUFFER_SIZE];
while (stream.available())
{
char c = stream.read();
if (c == '\n') //wenn LF eingelesen
{
buffer[index] = '\0'; //String terminieren
index = 0;
return buffer; //melden dass String fertig eingelesen wurde
}
else if (c >= 32 && index < READ_BUFFER_SIZE - 1) //solange noch Platz im Puffer ist
{
buffer[index++] = c; //Zeichen abspeichern und Index inkrementieren
}
}
return nullptr; //noch nicht fertig
}
Ergebnis:
Eingelesen: 10,10,10
10
10
10
Ergebnis, wenn in meinem vorhandenen Code:
Eingelesen: 1,0,10
1
0
10
Eingabe war jeweils 10,10,10.
Hat jemand eine alternative Idee, wie man das umsetzen kann?
Vielen Dank im Voraus!