MATLAB串口通信與動態繪圖

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初學者,若有不足,請指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容