MATLAB串口通信
MATLAB本身是支持Serial Port Devices,即串口設備。通過自帶的一些函數可以操作串口(讀取、寫入等)
官方英文教程
然而在實際使用中,我的和官方給出的例子有一些不同。
下面給出一個完整的串口讀取的例子:
%新建串口對象
s1=serial('COM15','BaudRate',9600);
%嘗試代開串口
try
fopen(s1); %打開串口對象
catch err
fclose(instrfind); %關閉被占用的串口
error('請確認選擇了正確的串口'); %輸出錯誤提示
end
a=fscanf(s1,'%d'); %讀取數據
fclose(s1); %關閉串口
動態繪圖
要實現讀取一個數據,然后實時更新圖像。而不是已知所有點坐標再進行繪圖。
動態曲線
h = animatedline; %創建空白動態曲線
axis([0 40 5 30]) %設置坐標系范圍
x = linspace(0,40,800);
xlabel('時間');
ylabel('距離');
for k = 1:length(x)
y = (fscanf(arduino,'%d')/100.0);
addpoints(h,x(k),y);
drawnow
end
可以實現從串口實時讀取數據并進行顯示。最終效果類似心電圖。
動態點坐標
這個挺頭疼的。因為我不需要兩點之間連線,而是類似隨機的散點。
最終用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
還有其他動態繪圖的方法,比如comet()
函數、hold on等用法??梢宰孕邪俣?。但我之所以不采用這些方法的原因是因為它們的坐標系是會變化的,不固定。
MATLAB初學者,若有不足,請指正。