2016-10-16 40 views
0

我目前正在從我的uart線上查找數據; 我有一個與uart連接的PSoC 4,它發送得很好(所有的時間,每個數據之間延遲20ms),然後我有matlab來接收數據。確定使用matlab從UART中讀取多少數據

我使用的fscanf(s, '%d')功能是,它返回約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

問候

+0

能否請您加入發送器代碼的一部分(我猜是C代碼)? – Rotem

回答

0

而不是使用的fscanf的,你可以使用的fread讀取字節的具體數量。

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

在你的情況,其中s =串行( 'COM3'),在一個字節讀你可以這樣寫:

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

這裏的參數是:OBJ,大小, '精確'

Ps當你完成後,不要忘了fclose(s)串行端口,因此可以不得到「的OBJ已經打開」錯誤:)

所有最好再次運行程序..