一、問題描述
想透過comport來接收Event
而comport為RS232的線材傳輸
先前的comport 接收藍芽資料為連續型的
之前的文章:Matlab com port 連線 (bluetooth)
而這次是要接收非連續型的資料
os. 想搞死人嗎???
為了這非連續型的問題,耗了本姑娘我兩天的工作天
網路找解決方案找很久,卻一直無法解套~
好在在最後跨年放假前找到解決方式了
呼~~~
原先會遇到的錯誤訊息如下:
a =fread(s);
Warning: Unsuccessful read: The specified amount of data was not returned within the Timeout period.
a =fscanf(s);
Warning: Unsuccessful read: A timeout occurred before the Terminator was reached.
二、方法(matlab程式)
s = serial('COM45'); %assigns the object s to serial port
set(s, 'InputBufferSize', 256); %number of bytes in inout buffer
set(s, 'FlowControl', 'hardware');
set(s, 'BaudRate', 9600);
set(s, 'Parity', 'none');
set(s, 'DataBits', 8);
set(s, 'StopBit', 1);
set(s, 'Timeout',10);
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)]);
fopen(s); %opens the serial port
t=1;
disp('Running');
x=0;
a=0;
while(t < 300) %Runs for 200 cycles - if you cant see the symbol, it is "less than" sign. so while (t less than 200)
%a =fread(s); %reads the data from the serial port and stores it to the matrix a
%a =fscanf(s);
readasync(s); <--就是這行....關鍵行.....耗了本姑娘2天的時間!!!
if (s.BytesAvailable > 0)
a = fread(s,s.BytesAvailable,'uint8');
end
a=max(a); % in this particular example, I'm plotting the maximum value of the 256B input buffer
x =[x a]; % Merging the value to an array, this is not very computationaly effective, as the array size is dynamic.
%Consider pre allocation the size of the array to avoid this. But beware, You might loose some important
%data at the end!
plot(x);
axis auto;
grid on;
disp([num2str(t),'th iteration max= ',num2str(a)]);
hold on;
t=t+1;
a=0; %Clear the buffer
drawnow;
end
fclose(s); %close the serial port
呼~~~
終於。。。
可繼續往下做事了
留言列表