• 您的位置:首页 > 新闻动态 > 技术文章

    matlab 读取串口传感器数据

    2022/12/10      点击:

    读取数据后,解析到相应的苏话剧格式用到的函数:

    serialport   作用:连接到串行端口     

    使用方法:参考链接  https://ww2.mathworks.cn/help/matlab/ref/serialport.html
    readline 作用:从串行端口读取 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中修改