Я пытаюсь получить до 64 строк максимум 16 символов для отображения на ЖК-экране через последовательный порт. Эти строки должны быть указаны во время запуска. У меня есть следующий, который работает в большинстве случаев:Чтение нескольких строк из серийного
unsigned char textMatrix[64][17];
unsigned char lineCount = 0;
void readLines(){
Serial.println("Send up to 64 lines of up to 16 characters. Send an empty line to stop sending lines. Make sure to use \\n (newline) as line terminator!");
Serial.setTimeout(10000);
bool receiving = true;
while (receiving){
if(Serial.available() > 0) {
textMatrix[lineCount][0] = '\0';
char res = Serial.readBytesUntil('\n',textMatrix[lineCount],16);
if (res == 0){
if (textMatrix[lineCount][0] != '\0'){
continue;
}
Serial.println("Received empty line");
receiving = false;
break;
}
textMatrix[lineCount][16] = '\0';
Serial.print("Received line: ");
Serial.println((const char*)textMatrix[lineCount]);
lineCount++;
if (lineCount >= 63){
receiving = false;
}
}
}
}
Проблема возникает, когда я отправить следующую строку:
Хорошо, что один
Эта линия точно 16 символов. Я предполагаю, что это приводит к тому, что readBytesUntil
запускается дважды, в результате чего он будет таким же, как нажатие дважды. Кажется, я не могу найти разницу между серьезной отправкой пустой строки или отправкой строки из 16 символов. Какой был бы лучший способ разрешить это?