#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 уже открыт» 🙂
Всего наилучшего..