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
    评论
MATLAB中,可以使用串口对象来实现与计算机或其他设备之间的串行通信。下面是一些基本步骤来实现串口模块: 1. 创建一个GUI界面:可以使用MATLAB GUIDE工具来创建GUI。 2. 添加串口对象:在GUI中添加串口对象,并设置其参数,如端口号、波特率、数据位数、停止位数和校验位。 3. 打开串口:在GUI中添加一个按钮或菜单项,当用户点击按钮或选择菜单项时,通过串口对象打开串口。 4. 发送数据:在GUI中添加文本框或其他控件,用于输入要发送的数据。然后,通过串口对象将数据发送到设备。 5. 接收数据:使用串口对象的回调函数来接收从设备发送回来的数据,并将其显示在GUI中的文本框或其他控件中。 下面是一个简单的示例代码: ``` % --- Executes on button press in openButton. function openButton_Callback(hObject, eventdata, handles) % Create serial object s = serial('COM1', 'BaudRate', 9600); s.DataBits = 8; s.StopBits = 1; s.Parity = 'none'; % Open serial port fopen(s); % Save serial object in handles structure handles.serialPort = s; guidata(hObject, handles); % --- Executes on button press in sendButton. function sendButton_Callback(hObject, eventdata, handles) % Get data from input text box data = get(handles.inputTextBox, 'String'); % Send data over serial port fprintf(handles.serialPort, data); % --- Serial port callback function function serialPort_Callback(obj, event) % Read data from serial port data = fscanf(obj, '%s'); % Display data in output text box set(handles.outputTextBox, 'String', data); ``` 注意,在GUI中添加串口对象时,需要将其回调函数设置为serialPort_Callback。此外,还需要在GUI的OpeningFcn函数中设置串口对象的回调函数: ``` % --- Executes just before gui is made visible. function gui_OpeningFcn(hObject, eventdata, handles, varargin) % Set serial port callback function s = serial('COM1', 'BaudRate', 9600); s.BytesAvailableFcnMode = 'terminator'; s.BytesAvailableFcn = @serialPort_Callback; % Save serial object in handles structure handles.serialPort = s; guidata(hObject, handles); ``` 上述代码中,'terminator'指定了数据终止符,当接收到终止符时,串口对象将调用回调函数进行处理。在本例中,终止符为换行符'\n'。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值