Matlab GUIDE -- 串口操作

1、首先新建-->应用程序-->GUIDE。

2、绘制一个简单的UI。


3、然后右击“打开串口”图标-->查看回调-->callback,即可打开此图标的回调函数,此回调函数是press button时执行(可按需要选择其他回调)。

4、在回调函数中添加打开串口的代码。

	delete(instrfindall); %删除所有串口
        s3 = serial('COM3', 'BaudRate', 115200);  %生成串口句柄
        set(s3,'DataBits', 8, 'StopBits', 1, 'Parit', 'none', 'FlowControl', 'none'); %设置串口参数
        s3.BytesAvailableFcnMode = 'byte';    %表示字节模式
        s3.BytesAvailableFcnCount = 20;  %20 bytes  %收到20个字节就中断进入回调函数
        s3.BytesAvailableFcn = {@My_SerialPort_Callback, handles};  %设置自己的回调函数(串口处理函数)。

        try      %尝试打开串口 
            fopen(s3);
            disp('Open COM3');   %串口打开成功
        catch
            disp('Open COM3 faild');  %打开串口失败,串口不存在或串口被占用。
        end

同时设置绘图函数,

GYRO_RAW_LX = plot(handles.axes1, gyro_axisX, gyro_raw_x, 'r', 'LineWidth', 1);
                hold on;   %不加无效

注:如果不加hold on,绘图曲线不会保持,将看不到曲线。

5、回调函数需新建My_SerialPort_Callback.m, 名称必须与上步设置的回调名称一致。

function  My_SerialPort_Callback( hObject, BytesAvailable, p )
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
%   我是栗子
%    plot(p.axes1, sin(1:0.01:25.99));


global Xlim sensor_raw_x gyro_axisX gyro_raw_x; %全局变量


data = fread(hObject,20,'uint8');  %读串口20字节,类型uint8
注:data(0)下标是从1开始的,不是从0开始。

%数据结构,协议自拟,以下是栗子。
%强制转换为int16
sensor_raw_x = typecast(uint16(data(3) * 256 + data(4)), 'int16');

Xlim = Xlim + 1; %更新坐标轴
gyro_axisX = [gyro_axisX Xlim]; %一维矩阵
gyro_raw_x = [gyro_raw_x, sensor_raw_x]; %一维矩阵
set(GYRO_RAW_LX, 'Xdata', gyro_axisX, 'Ydata', gyro_raw_x); %设置X,Y轴
set(p.axes1,'XLim',[Xlim-100 Xlim+20]);   %移动坐标轴

end
到此应该可以串口绘图了。



6、想要让数值显示在很简单,在GUIDE中打开其中一个可编辑文本属性,找到Tag栏,填写自定义变量名,如Gyro_Xdata。之后在串口回调函数My_SerialPort_Callback.m里以下函数即可,其他数值显示操作相同。

set(p.Gyro_Xdata,'string',sensor_raw_x);

7、打开的串口使用后必须关闭,否则串口会一直被占用。

在“关闭串口”button callback中写入以下函数

        %% 停止并删除串口对象
        scoms = instrfind;   %
        fclose(scoms);
        delete(scoms);
        disp('Close COM3');
8、保存数据。

在“保存数据”button callback中写入以下函数

global gyro_raw_x;   
filename1 = 'gyro_x_sample.xlsx';
A = [gyro_raw_x'];  %转置
delete(filename1);  %删除原有文件
fprintf('delete %s\r\n', filename1);
xlswrite(filename1,A,1,'A1');  
fprintf('write %s done!\r\n', filename1);
之后点击保存数据按键即可保存,这里没有限制保存范围,收到多少数据就会保存多少数据。

这里保存为Excel表格,也可以保存为其他格式(TXT\CSV\CDF.........)。


9、OVER!



  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值