char totalFrames[] = "\"totalFrames\":\"2\",";
char frame1[] = "\"frame1\":\"0,0,255,0,0;0,1,255,0,0;0,2,255,255,0;0,3,255,255,0;\",";
char frame2[] = "\"frame2\":\"0,0,255,255,0;0,2,255,255,0;\",";
void parseLine(char * line) {
const size_t totalFrameLength = strlen("\"totalFrames\":\"");
const size_t FrameIDLength = strlen("\"frame");
if (strncmp(line, "\"totalFrames\":\"", totalFrameLength) == 0) {
// totalFrames
Serial.print("it's the total Frame count ==> ");
char *endPtr;
long n = strtol (line + totalFrameLength, &endPtr, 10); // https://cplusplus.com/reference/cstdlib/strtol/;
if (*endPtr == '\"') {
Serial.print("Expecting ");
Serial.print(n);
Serial.println(" frames.");
} else {
Serial.println("wrong format.");
}
}
else if (strncmp(line, "\"frame", FrameIDLength) == 0) {
Serial.print("it's a frame definition ==> ");
char *endPtr;
long n = strtol (line + FrameIDLength, &endPtr, 10);
if (strncmp(endPtr, "\":\"", 3) == 0) {
Serial.print("Frame ID ");
Serial.println(n);
char * startPtr = endPtr += 3; // go to the start of the [x,y,r,g,b;] repetition
int x, y, r, g, b;
while (*startPtr != '\"') {
if (sscanf(startPtr, "%d,%d,%d,%d,%d;", &x, &y, &r, &g, &b) == 5) {
Serial.print("point ("); Serial.print(x);
Serial.print(", "); Serial.print(y);
Serial.print(") - color ("); Serial.print(r);
Serial.print(", "); Serial.print(g);
Serial.print(", "); Serial.print(b);
Serial.println(")");
} else {
Serial.println("wrong point format.");
break;
}
startPtr = strchr(startPtr, ';') + 1;
}
Serial.println("------- END OF FRAME -------");
} else {
Serial.println("wrong frame format.");
}
}
else {
Serial.println("not recognized");
}
}
void setup() {
Serial.begin(115200);
parseLine(totalFrames);
parseLine(frame1);
parseLine(frame2);
}
void loop() {}