Das ist eine unschöne Hybrid-Version zwischen deiner Einlese-Funktion und dem Arduino-Parse Kram
Das kann man problemlos auf einmal erledigen. Man gibt das ein:
"Config:100,100,100,100"
Dann überprüfst du entweder mit strstr() oder strncmp() den Anfang des Strings. strncmp() überprüft nur die ersten n Zeichen. Wenn du da also für n strlen_P(PSTR("Config:")) einsetzt sollte es passen. Hier gleich mal die bessere _P Version damit nicht noch mehr RAM verbraucht wird.
strstr() geht auch, aber durchsucht den gesamten String wenn er nichts findet.
Dann springst du mit text = text + strlen_P(PSTR("Config:")) ; auf den Anfang der Zahlen. Hier bietet es sich dann eventuell an die Länge der Suchstrings irgendwo am Angang als Konstanten zu speichern. Dann muss man es nicht jedesmal extra hinschreiben und es wird nur einmal Flash belegt. Ist aber nicht zwingend nötig.
Von strncmp() gibt es auch eine _P Version die mit einem Suchstring im Flash arbeitet. Aber probier erst mal die normale Variante.
Dann strok() um den String zu splitten:
int val1, val2, val3, val4;
val1 = atoi(strtok(text, ","));
val2 = atoi(strtok(NULL, ","));
val3 = atoi(strtok(NULL, ","));
val4 = atoi(strtok(NULL, ","));
Man könnte auch am Anfang strtok() mit ":" machen um den Anfang abzuschneiden. Aber Pointer-Arithmetik wie oben beschrieben ist da etwas eleganter.