【代码】matlab调用COM端口获取传感器数据

参考链接
原始代码

clc
clear
close all
fclose(instrfind)%先关闭所有串口
%
scom = serial('COM7');    %建立串口对象函数(需要手动和自己电脑的端口匹配)
fclose(scom);               %关闭串口设备对象
scom.InputBufferSize =512;%输入缓冲区
scom.OutputBufferSize =512;%输出缓冲区
scom.ReadAsyncMode = 'continuous';%异同通信模式下,读取串口数据采用连续接收数据方式,下位机返回数据自动存入输入缓冲区中。
scom.BaudRate  = 115200;%设置波特率
scom.Parity = 'none';%无校验位
scom.StopBits  = 1;%1个停止位
scom.DataBits  = 8;%8个数据位
scom.Terminator = 'LF';%设置终止符(CR为回车符,LF为换行符)
scom.FlowControl  = 'none';%流控
scom.timeout  = 1.0;%一次操作超时时间
scom.BytesAvailableFcnMode =  'byte';%数据读入格式
scom.BytesAvailableFcnCount  = 1024;%触发中断的数据数量
scom.BytesAvailableFcn  = @callback;%串口接收中断回调函数 

fopen(scom);
% 0X55 0X01 0X00 0X00 0X00 0X00 0XD3 0XAA
fwrite(scom,[0X55 0X01 0X00 0X00 0X00 0X00 0XD3 0XAA])%写入数据
data1 = fread(scom,8,'uint8'); %读取数据
qqq=[data1(4),data1(5),data1(6)];
data111=dec2hex(qqq);
q1=string(data111);
if length(data111(1,:))==1
    q2=['0'+q1(1,:)+'0'+q1(2,:)+'0'+q1(3,:)];
else
    q2=[q1(1,:)+q1(2,:)+q1(3,:)];
end
length=hex2dec(q2)


fclose(scom);%关闭串口设备对象
delete(scom);%删除内存中的串口设备对象

代码1

clc
clear
close all
fclose(instrfind);%先关闭所有串口
%% 参数设置
scom = serial('COM5');    %建立串口对象函数(需要手动和自己电脑的端口匹配)
fclose(scom);               %关闭串口设备对象
scom.InputBufferSize =512;%输入缓冲区
scom.OutputBufferSize =512;%输出缓冲区
scom.ReadAsyncMode = 'continuous';%异同通信模式下,读取串口数据采用连续接收数据方式,下位机返回数据自动存入输入缓冲区中。
scom.BaudRate  = 115200;%设置波特率
scom.Parity = 'none';%无校验位
scom.StopBits  = 1;%1个停止位
scom.DataBits  = 8;%8个数据位
scom.Terminator = 'LF';%设置终止符(CR为回车符,LF为换行符)
scom.FlowControl  = 'none';%流控
scom.timeout  = 10;%一次操作超时时间
scom.BytesAvailableFcnMode =  'byte';%数据读入格式
scom.BytesAvailableFcnCount  = 1024;%触发中断的数据数量
scom.BytesAvailableFcn  = @callback;%串口接收中断回调函数 
%% 打开端口设备
fopen(scom);
% 测量信息0X55 0X0D 0X00 0X00 0X00 0X00 0XF2 0XAA
% 启动测量0X55 0X05 0X00 0X00 0X00 0X00 0XCC 0XAA
fwrite(scom,[0X55 0X05 0X00 0X00 0X00 0X00 0XCC 0XAA])%启动测量
step_num=100;
tic
for i=1:step_num
    data1 = fread(scom,8,'uint8'); %读取数据
    data_data=dec2hex(data1);
    %防止串码
    mmm=find(string(data_data)=='55');
    mmm=mmm(1);
    ddd=[data_data;data_data];
    DDD(i,:)=mmm;
    length(i)=hex2dec(string([ddd(mmm+3,:),ddd(mmm+4,:),ddd(mmm+5,:)]));
    i
end
time_all=toc;
delta_time=time_all/step_num
fclose(scom);%关闭串口设备对象
delete(scom);%删除内存中的串口设备对象
%% 画图
figure(1)
plot(delta_time:delta_time:time_all,length,'b.-')
xlabel('时间/s')
ylabel('距离/mm')

代码2

clc
clear
close all
fclose(instrfind);%先关闭所有串口
%% 1.参数设置
scom = serial('COM7');    %建立串口对象函数(需要手动和自己电脑的端口匹配)
fclose(scom);               %关闭串口设备对象
scom.InputBufferSize =512;%输入缓冲区
scom.OutputBufferSize =512;%输出缓冲区
scom.ReadAsyncMode = 'continuous';%异同通信模式下,读取串口数据采用连续接收数据方式,下位机返回数据自动存入输入缓冲区中。
scom.BaudRate  = 115200;%设置波特率
scom.Parity = 'none';%无校验位
scom.StopBits  = 1;%1个停止位
scom.DataBits  = 8;%8个数据位
scom.Terminator = 'LF';%设置终止符(CR为回车符,LF为换行符)
scom.FlowControl  = 'none';%流控
scom.timeout  = 10;%一次操作超时时间
scom.BytesAvailableFcnMode =  'byte';%数据读入格式
scom.BytesAvailableFcnCount  = 1024;%触发中断的数据数量
scom.BytesAvailableFcn  = @callback;%串口接收中断回调函数 
%% 2.打开端口设备
fopen(scom);
%% 3.1.设置波特率
% fwrite(scom,[0X55 0X12 0X00 0X00 0X00 0X0C 0X96 0XAA])%115200
% fwrite(scom,[0X55 0X12 0X00 0X00 0X00 0X10 0XA8 0XAA])%921600
%% 3.2.设置测量频率/Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0X0A 0X9F 0XAA])%10Hz 
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0X14 0XC3 0XAA])%20Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0X19 0X8F 0XAA])%25Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0X32 0XE3 0XAA])%50Hz
fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0X64 0X3B 0XAA])%100Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0XC8 0XBA 0XAA])%200Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X00 0XFA 0X1D 0XAA])%250Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X01 0X2C 0X4B 0XAA])%300Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X01 0X90 0X89 0XAA])%400Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X01 0XF4 0XF6 0XAA])%500Hz
% fwrite(scom,[0X55 0X03 0X00 0X00 0X02 0X58 0X5A 0XAA])%600Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X02 0XBC 0X5F 0XAA])%700Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X03 0X20 0XEF 0XAA])%800Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X03 0X84 0XD7 0XAA])%900Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X03 0XE8 0X11 0XAA])%1000Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X04 0XB0 0X78 0XAA])%1200Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X05 0XDC 0X4A 0XAA])%1500Hz%注意
% fwrite(scom,[0X55 0X03 0X00 0X00 0X07 0XD0 0XEE 0XAA])%2000Hz%注意

%% 4.启动测量
fwrite(scom,[0X55 0X05 0X00 0X00 0X00 0X00 0XCC 0XAA])%启动测量
step_num=100;
tic
for i=1:step_num
    data1 = fread(scom,8,'uint8'); %读取数据
    data_data=dec2hex(data1);
    %防止串码
    mmm=find(string(data_data)=='55');
    mmm=mmm(1);
    ddd=[data_data;data_data];
    DDD(i,:)=mmm;
    length(i)=hex2dec(string([ddd(mmm+3,:),ddd(mmm+4,:),ddd(mmm+5,:)]));
    i
end
time_all=toc;
delta_time=time_all/step_num
fclose(scom);%关闭串口设备对象
delete(scom);%删除内存中的串口设备对象
%% 5.画图
figure(1)
plot(delta_time:delta_time:time_all,length,'b.-')
xlabel('时间/s')
ylabel('距离/mm')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值