• matlab 讀取串口傳感器數(shù)據(jù)

    2022/12/10??????點擊:

    讀取數(shù)據(jù)后,解析到相應的蘇話劇格式用到的函數(shù):

    serialport   作用:連接到串行端口     

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