matlab 讀取串口傳感器數(shù)據(jù)
2022/12/10??????點擊:
讀取數(shù)據(jù)后,解析到相應的蘇話劇格式用到的函數(shù):
serialport 作用:連接到串行端口
使用方法:參考鏈接 https://ww2.mathworks.cn/help/matlab/ref/serialport.htmlreadline 作用:從串行端口讀取 ASCII 字符串數(shù)據(jù)行
使用方法:參考鏈接 https://ww2.mathworks.cn/help/matlab/ref/serialport.readline.html?s_tid=doc_ta
strsplit 作用:在指定分隔符處拆分字符串或字符向量
使用方法: 參考鏈接 https://ww2.mathworks.cn/help/matlab/ref/strsplit.html?searchHighlight=strsplit&s_tid=srchtitle_strsplit_1
str2double 作用:將字符串轉(zhuǎn)換為雙精度值
使用方法: 參考鏈接 https://ww2.mathworks.cn/help/matlab/ref/str2double.html?s_tid=doc_ta
范例代碼:
% ======注意:本程序需要在arduino端代碼使用Serial.print(),并以逗號分隔======== % ======例如,arduino端將x,y兩個數(shù)據(jù)傳輸?shù)紺OM3口,arduino端代碼為 % ============Serial.print(x);Serial.print(","); % ============Serial.print(y); % ============Serial.print("\n"); clear;clc;clf % 自定義參數(shù) N=3000; % 總數(shù)據(jù)量長度 n1=100; % *近數(shù)據(jù)量長度 % 讀取串口字符串,并轉(zhuǎn)化為數(shù)據(jù) arduinoObj=serialport("COM3",9600); % 串口通信COM3,波特率9600(可根據(jù)實際情況修改) data = readline(arduinoObj); % 讀取 ASCII 字符串數(shù)據(jù)行 n=length(strsplit(data,',')); % 在逗號分隔符處拆分字符串,并得到拆分后的長度 % 初始化用來存儲數(shù)據(jù)的矩陣 B=zeros(N,n,'double'); % 初始化矩陣B,用來存儲總數(shù)據(jù)。 A=zeros(n1,n,'double'); % 初始化矩陣A,用來存放*近100組數(shù)據(jù) t=zeros(n1,1,'double'); % 初始化數(shù)組t,用來存放*近的100個時間數(shù) % 更新畫圖 for kk=1:N % 總共存N行數(shù)據(jù) str = readline(arduinoObj); % 從串口讀取字符串 data=str2double(strsplit(str,',')); % 在逗號分隔符處拆分字符串,并將除逗號外的字符串轉(zhuǎn)化為double數(shù)據(jù) B(kk,:)=data; % 把所有數(shù)據(jù)存儲到B矩陣 figure(n+1) plot(1:kk,B(1:kk,2)); % 畫出B的第二列數(shù)據(jù)(可根據(jù)實際情況修改) % 如果需要畫*新的n個數(shù)據(jù),則啟用以下代碼,否則可注釋掉 % A=circshift(A,-1); % 把A矩陣向下循環(huán)平移 % A(end,:)=data; % 把A矩陣*后一行數(shù)替換為data。以上兩行的作用是保證A矩陣的數(shù)據(jù)為*新的100組數(shù)據(jù) % t=circshift(t,-1); % t(end)=kk; % for ii=n:-1:1 % figure(ii) % plot(t,A(:,ii)); % end end delete(arduinoObj); % 刪除端口,以便能在arduino中修改
- 上一篇:三維環(huán)境下的左手和右手坐標系相互轉(zhuǎn)換方法 2023/2/7
- 下一篇:Csv文件操作(創(chuàng)建、讀取、寫入、修改) 2022/9/11