Определите, сколько данных для чтения из UART с помощью matlab

#matlab #protocols #uart #serial-communication

#matlab #протоколы #uart #последовательная связь

Вопрос:

В настоящее время я работаю над выводом данных из моей линии uart; У меня есть PSoC 4, подключенный к uart, который отправляет просто отлично (все время, с задержкой 20 мс между каждым данными), затем у меня есть matlab для получения данных.

Я использую fscanf(s, '%d') функцию is, и она возвращает около 3 чисел, отправленных uart, пример ниже:

 s = serial('COM3'); %assigns the object s to serial port

set(s, 'InputBufferSize', 1024); %number of bytes in inout buffer
set(s, 'FlowControl', 'hardware');
set(s, 'BaudRate', 115200);
set(s, 'Parity', 'none');
set(s, 'DataBits', 8);
set(s, 'StopBit', 1);
set(s, 'Timeout',0.5);
%clc;

disp(get(s,'Name'));
prop(1)=(get(s,'BaudRate'));
prop(2)=(get(s,'DataBits'));
prop(3)=(get(s, 'StopBit'));
prop(4)=(get(s, 'InputBufferSize'));

disp(['Port Setup Done!!',num2str(prop)]);

         %opens the serial port
disp('Running');
fopen(s);
b = fscanf(s, '%d') 

-------------------------------------------------------------------------------------------
Matlab terminal:
b  = 
-213
-205
-215
 

Программа извлекает 3 числа, из которых я хотел бы получить только первое (-213)
Кстати, число может быть любым между 16000 и — 16000

С наилучшими пожеланиями

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

1. Не могли бы вы добавить часть кода передатчика (я полагаю, код C)?

Ответ №1:

Вместо использования fscanf вы можете использовать fread для чтения определенного количества байтов.

https://uk.mathworks.com/help/matlab/ref/serial.fread.html

В вашем случае, где s = serial (‘COM3’), для чтения в один байт вы бы написали:

 b = fread(s, 1, 'uchar');
 

где аргументы: obj, size, ‘precision’

P.s. Не забудьте fclose(s) подключить последовательный порт, когда закончите, чтобы вы могли снова запустить программу, не получая ошибку «Obj уже открыт» 🙂

Всего наилучшего..