реально строка длиннее 64 байт приходит, я знаю, что она на не заканчивается на том месте, где должа c while (Serial1.available() == 0) { } // Wait for response while (Serial1.available()) { character = Serial1.read(); parsing[index] = character; if (parsing[index] =='>') completeMessage=true; if (index>0) { if (String(parsing).indexOf("ok") > -1) { awaitingOK=false; //debugln("< OK from status"); } } index++; delay(1); } первый вызов - джать пока появятся байты в буфере вторая - читать, раз уж они там появились

Комментарии: 6

  1. Argentina

    что такое parsing ?

    • Elektrougli

      процесс чтения - затирает RX-буфер. Возможно, что устройство записывает в начало буфера? массив длиной 64 байта и тут вопрос: куда будет складывать данные мк, если буфер закончился?

      • Argentina

        а почему 64?

        • Elektrougli

          потому, что размер буфера у мк, судя по данным из инторнетов ограничен 64 байтами. Измерял длину строки - ровно 64 https://arduino.ru/Reference/Serial/Available может быть ты был и прав, читать даташит на atmega2560 будет более конструктивно, однако принципиальная часть остается непонятной - куда кладет данные мк, если ему пихают лишнее? работа буфера на уровне железа - загадка

          • Argentina

            я понял. забудь про даташыт

            • Elektrougli

              мне это почему-то напоминает передачу данных по SPI, если данных больше - данные идут дальше если к буферу подключен следующий последовательный. по идее что-то должно дернуть сброс, чтобы данные начали записываться в начало буфера а может ли быть так, что функция available() - косячная, и не умеет дочитывать не влезающее? вот исходник ее видимо стоит почитать...

Не нашли ответ?

Вам также может быть интересно