ну тут такая у тебя ошибка: ты наполняешь массив длиной в размер буфера как раз в тот момент, когда буфер пополняется, вместо, того, чтобы при переполнении буфера записывать значение буфера в строку двумерного массива и обнулять буфер. эти операции по скорости выполнения существенно быстрее, нежели ожидание поступления данных из serial. и да, избавься в коде от delay.
Комментарии: 8
Elektrougli
так разве read не стирает за собой буфер?
Argentina
смотри, если available ничего не получила, этот код не будет выполняться это даже в первой строке кода старательно отмечено через == 0
Elektrougli
да, и как тогда очистить буфер после его заполнения? какая-то хитрая команда на регистрах? serial.flush очищает вроде исходящие данные
Argentina
к тому же что мешает вообще это хранить в String
Elektrougli
кроме как вычитыванием - хз как . это понятно, каковы мои действия? могу, например, проверять количество доступных байт в буфере и печатать их в мониторе порта. хз что это даст, процесс записи в буфер я не контролирую, успеть вычитать до того, как там станет 64?
Anonim
Почитай RS232 протокол. Там для этого есть RTS/CTS и DTR/DSR signalling discipline lines. Без них твоя проблема неразрешима. Как полумеру можешь сделать физическое устройство, имплементирующее полный RS232. Оно будет сидеть между твоими передатчиком и приемником и буфферизовать данные, отдавая их мелкими порциями в ардуину. Другая полумера - конфигурировать порт на более низкую скорость.