MATLAB串口通信
MATLAB本身是支持Serial Port Devices岸夯,即串口設(shè)備挥转。通過自帶的一些函數(shù)可以操作串口(讀取个少、寫入等)
官方英文教程
然而在實(shí)際使用中踏揣,我的和官方給出的例子有一些不同锻全。
下面給出一個(gè)完整的串口讀取的例子:
%新建串口對象
s1=serial('COM15','BaudRate',9600);
%嘗試代開串口
try
fopen(s1); %打開串口對象
catch err
fclose(instrfind); %關(guān)閉被占用的串口
error('請確認(rèn)選擇了正確的串口'); %輸出錯(cuò)誤提示
end
a=fscanf(s1,'%d'); %讀取數(shù)據(jù)
fclose(s1); %關(guān)閉串口
動(dòng)態(tài)繪圖
要實(shí)現(xiàn)讀取一個(gè)數(shù)據(jù)狂塘,然后實(shí)時(shí)更新圖像。而不是已知所有點(diǎn)坐標(biāo)再進(jìn)行繪圖虱痕。
動(dòng)態(tài)曲線
h = animatedline; %創(chuàng)建空白動(dòng)態(tài)曲線
axis([0 40 5 30]) %設(shè)置坐標(biāo)系范圍
x = linspace(0,40,800);
xlabel('時(shí)間');
ylabel('距離');
for k = 1:length(x)
y = (fscanf(arduino,'%d')/100.0);
addpoints(h,x(k),y);
drawnow
end
可以實(shí)現(xiàn)從串口實(shí)時(shí)讀取數(shù)據(jù)并進(jìn)行顯示睹耐。最終效果類似心電圖。
動(dòng)態(tài)點(diǎn)坐標(biāo)
這個(gè)挺頭疼的部翘。因?yàn)槲也恍枰獌牲c(diǎn)之間連線硝训,而是類似隨機(jī)的散點(diǎn)。
最終用clf的命令解決了問題新思。代碼如下
n = 500;
for i=1:n
clf; %清空
a = (fscanf(s1,'%d')/100.0);
b = (fscanf(s2,'%d')/100.0);
plot(px,py,'or','MarkerSize',5,'MarkerFaceColor','r');
axis([0 40 0 40]);
drawnow;
end
還有其他動(dòng)態(tài)繪圖的方法窖梁,比如comet()
函數(shù)、hold on等用法夹囚∽萘酰可以自行百度。但我之所以不采用這些方法的原因是因?yàn)樗鼈兊淖鴺?biāo)系是會(huì)變化的荸哟,不固定假哎。
MATLAB初學(xué)者,若有不足鞍历,請指正舵抹。