Пытаюсь принять на ESP32 массив из 1419 байт+начальный, конечный символ и разделители, получается очень много. Видимо упирается в размер приемного буфера, потому что на небольшом количестве данных работает.
#define PARSE_AMOUNT 1419 // число значений в массиве, который хотим получить
int intData[PARSE_AMOUNT];// массив численных значений после парсинга
boolean recievedFlag;
boolean getStarted;
byte index;
String string_convert = "";
void parsing() {
if (Serial.available() > 0) {
char incomingByte = Serial.read(); // обязательно ЧИТАЕМ входящий символ
if (getStarted) { // если приняли начальный символ (парсинг разрешён)
if (incomingByte != ',' && incomingByte != ';') { // если это не запятая И не конец
string_convert += incomingByte; // складываем в строку
} else { // если это пробел или ; конец пакета
intData[index] = string_convert.toInt(); // преобразуем строку в int и кладём в массив
string_convert = ""; // очищаем строку
index++; // переходим к парсингу следующего элемента массива
}
}
if (incomingByte == '$') { // если это <
getStarted = true; // поднимаем флаг, что можно парсить
index = 0; // сбрасываем индекс
string_convert = ""; // очищаем строку
}
if (incomingByte == ';') { // если таки приняли > - конец парсинга
getStarted = false; // сброс
recievedFlag = true; // флаг на принятие
}
}
}
void setup() {
Serial.begin(115200);
}
void loop() {
parsing(); // функция парсинга
if (recievedFlag) { // если получены данные
recievedFlag = false;
//for (byte i = 0; i < PARSE_AMOUNT; i++) { // выводим элементы массива
Serial.print(intData[0]); Serial.print(" ");
Serial.print(intData[1]); Serial.print(" ");
Serial.print(intData[2]); Serial.print(" ");
Serial.print(intData[3]); Serial.print(" ");
Serial.print(intData[4]); Serial.print(" ");
Serial.print(intData[5]); Serial.print(" ");
Serial.println();
}
}