Я пытаюсь получить поток данных с платформы Arduino до Matlab. Я хочу, чтобы Matlab читал 15 байт пакетов данных, разбирал их, а затем читал следующий фрагмент.Matlab: fscanf() не останавливается при подаче строки
В настоящее время у меня есть проблема, что matlab не прекращает чтение, пока буфер не будет заполнен.
Моя установка на Matlab стороне:
s=serial('COM25','BaudRate',115200, 'Terminator', 'LF')
fopen(s)
data=fscanf(s)
С аппаратной стороны:
usbMsg[0] = 0xA0;
usbMsg[1] = _packetCounter;
// ch1
usbMsg[2] = in[3];
usbMsg[3] = in[4];
usbMsg[4] = in[5];
// ch2
usbMsg[5] = in[6];
usbMsg[6] = in[7];
usbMsg[7] = in[8];
// ch3
usbMsg[8] = in[9];
usbMsg[9] = in[10];
usbMsg[10] = in[11];
// ch4
usbMsg[11] = in[12];
usbMsg[12] = in[13];
usbMsg[13] = in[14];
usbMsg[14] = '\n'; // LF
SerialUSB.write(usbMsg, 15);
"usbMsg" и "в" являются массивы байтов.
Вместо того, чтобы просто возвращать одно сообщение, команда fscanf() продолжает чтение. По-видимому, он не распознает терминатор.
Я пробовал разные Терминаторы: 'LF/CR' 'CR' 'LF' и их эквивалент ASCII Без всяких успехов.
Может ли кто-нибудь увидеть, где проблема?
Заранее благодарен!
EDIT:
У меня есть дополнительный следить за вопрос о буферах. Если бы я уменьшил размер буфера последовательного порта (последовательного объекта в пределах Matlab) до 15 байт и продолжал читать эти данные, может ли это привести к потере данных?
Я не уверен, есть ли буфер в интерфейсе usb и насколько он большой.
Когда вы устанавливаете терминатор, он применяется только к терминатору, прилагаемому к вашим исходящим сообщениям. 'fscanf()' всегда будет извлекать содержимое содержимого входящего буфера последовательного соединения. Я бы порекомендовал разбор его локально. –
Что касается синтаксического анализа, то входящие данные, вероятно, представляют собой массив символов. Пропустить 15 байт за раз в ваш синтаксический анализатор: 'для i = 1: ceil (длина (данные)/15); если длина (данные)> 15; toparse = data (1:15); data = data (16: end); синтаксический анализ (toparse); else разбор (данные); end; ' –
Эй! Отлично, большое спасибо. Теперь кажется очевидным, что вы это сказали :-). Если вы ответите комментарий как ответ, я могу отметить вопрос как ответ. :-) – Chuchaki