matlab 读取串口传感器数据
2022/12/10 点击:
读取数据后,解析到相应的苏话剧格式用到的函数:
serialport 作用:连接到串行端口
使用方法:参考链接 https://ww2.mathworks.cn/help/matlab/ref/serialport.htmlreadline 作用:从串行端口读取 ASCII 字符串数据行
使用方法:参考链接 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 作用:将字符串转换为双精度值
使用方法: 参考链接 https://ww2.mathworks.cn/help/matlab/ref/str2double.html?s_tid=doc_ta
范例代码:
% ======注意:本程序需要在arduino端代码使用Serial.print(),并以逗号分隔========
% ======例如,arduino端将x,y两个数据传输到COM3口,arduino端代码为
% ============Serial.print(x);Serial.print(",");
% ============Serial.print(y);
% ============Serial.print("\n");
clear;clc;clf
% 自定义参数
N=3000; % 总数据量长度
n1=100; % *近数据量长度
% 读取串口字符串,并转化为数据
arduinoObj=serialport("COM3",9600); % 串口通信COM3,波率9600(可根据实际情况修改)
data = readline(arduinoObj); % 读取 ASCII 字符串数据行
n=length(strsplit(data,',')); % 在逗号分隔符处拆分字符串,并得到拆分后的长度
% 初始化用来存储数据的矩阵
B=zeros(N,n,'double'); % 初始化矩阵B,用来存储总数据。
A=zeros(n1,n,'double'); % 初始化矩阵A,用来存放*近100组数据
t=zeros(n1,1,'double'); % 初始化数组t,用来存放*近的100个时间数
% 更新画图
for kk=1:N % 总共存N行数据
str = readline(arduinoObj); % 从串口读取字符串
data=str2double(strsplit(str,',')); % 在逗号分隔符处拆分字符串,并将除逗号外的字符串转化为double数据
B(kk,:)=data; % 把所有数据存储到B矩阵
figure(n+1)
plot(1:kk,B(1:kk,2)); % 画出B的第二列数据(可根据实际情况修改)
% 如果需要画*新的n个数据,则启用以下代码,否则可注释掉
% A=circshift(A,-1); % 把A矩阵向下循环平移
% A(end,:)=data; % 把A矩阵*后行数替换为data。以上两行的作用是应A矩阵的数据为*新的100组数据
% t=circshift(t,-1);
% t(end)=kk;
% for ii=n:-1:1
% figure(ii)
% plot(t,A(:,ii));
% end
end
delete(arduinoObj); % 删除端口,以便能在arduino中修改
- 上一篇:三维环境下的左手和右手坐标系相互转换方法 2023/2/7
- 下一篇:Csv文件操作(创建、读取、写入、修改) 2022/9/11
