Hallo, ich habe ein kleines Problem erstmal der Code:
void ReceivedGCodeData(uint8_t *payload, size_t length)
{
// Print the payload
/*for (size_t i = 0; i < length; i++)
{
DEBUG_PRINT((char)payload[i]);
}*/
// Flush the Serial2 buffer
if (gcodeQueue.empty())
{
serialFlush();
}
// Tokenize the payload into lines
char *token;
char *saveptr;
token = strtok_r((char *)payload, ",", &saveptr);
while (token != NULL)
{
byte mode = 0;
if (strcmp(token, "M7") == 0)
{
mode = 1;
}
if (strcmp(token, "M8") == 0)
{
mode = 1;
}
if (strcmp(token, "M2") == 0)
{
mode = 1;
}
if (strncmp(token, "G1", 2) == 0)
{
mode = 1;
}
if (strncmp(token, "G0", 2) == 0)
{
mode = 1;
}
if (strcmp(token, "G21") == 0)
{
mode = 1;
}
if (strcmp(token, "G90") == 0)
{
mode = 1;
}
if (strncmp(token, "G92", 3) == 0)
{
mode = 1;
}
if (strcmp(token, "F1250") == 0)
{
mode = 1;
}
if (mode == 1)
{
std::string gcodeLine = token;
gcodeQueue.push(gcodeLine);
}
token = strtok_r(NULL, ",", &saveptr);
}
// Print the esp free heap size by using esp_get_free_heap_size()
DEBUG_PRINTF("Free heap size: %d\n", esp_get_free_heap_size());
// Print the whole gcodequeue in the serial monitor
/*std::queue<std::string> tempQueue = gcodeQueue;
while (!tempQueue.empty())
{
DEBUG_PRINTLN(tempQueue.front().c_str());
tempQueue.pop();
}*/
}
void serialFlush()
{
while (Serial2.available() > 0)
{
char t = Serial2.read();
}
}
So in der Funktion kommt der payload vom Webserver request ich habe diesen payload mir auch loggen lassen und der sieht jedes mal sauber aus wenn ich mir aber dann die gcodequeue loggen lasse.
So sieht ein payload aus
G21,G90,G92X0Y0,M8,G0X22.43Y34.74,M7,G1X22.32Y34.74,G1X20.43Y34.42,G1X18.42Y34.32,G1X16.42Y34.42,G1X16.00Y32.42,G1X16.00Y30.31,G1X16.11Y28.31,G1X16.42Y26.41,G1X16.11Y24.72,G1X13.89Y24.62,G1X11.57Y24.62,G1X9.47Y24.62,G1X7.25Y24.62,G1X5.14Y24.62,G1X6.51Y23.57,G1X7.57Y22.51,G1X8.62Y21.35,G1X9.57Y20.19,G1X10.62Y18.93,G1X11.68Y17.56,G1X12.73Y15.98,G1X13.58Y14.82,G1X14.52Y13.45,G1X15.37Y11.97,G1X16.21Y10.81,G1X17.16Y9.23,G1X18.00Y7.86,G1X18.85Y6.38,G1X19.69Y5.12,G1X20.74Y6.38,G1X21.38Y7.75,G1X22.11Y9.12,G1X22.85Y10.49,G1X23.70Y11.87,G1X24.54Y13.34,G1X25.38Y14.82,G1X26.22Y16.50,G1X27.17Y18.29,G1X28.12Y19.67,G1X29.18Y21.14,G1X29.91Y22.51,G1X30.76Y23.99,G1X29.39Y24.83,G1X27.49Y24.72,G1X25.49Y24.51,G1X23.48Y24.51,G1X21.48Y24.62,G1X20.85Y26.09,G1X21.06Y27.89,G1X21.17Y29.78,G1X21.17Y31.79,G1X21.17Y34.11,M8,M2,G0X0Y0,GCODE
und manchmal wird einfach nach dem G0X0Y0 also das Gcode ist nur dafür da um das G0X0Y0 noch mitzunehmen, und manchmal (nicht immer) kommen einfach plötzlich verschiedene abschnitte vom payload nochmal in der gcodequeue am ende doppelt vor das heißt nach dem er G0X0Y0 gemacht hat kommt einfach nochmal ein abschnitt vom payload kein Plan warum das so ist, es ist auch nicht immer so, stimmt irgendwas nicht mit der ReceivedGCodeData funktion das kann ja eigentlich nur der Grund sein, wie gesagt habe mir den payload geloggt der schaut Gut aus aber das was dann wirklich in die GcodeQueue gepusht wird ist irgendwie komisch also immer zum schluss kommen wiederholte gcodes nochmal rein (meistens die Gcodes vom ende des eigentlichen gcodes)