基于MATLAB GUI界面的串口小助手

您所在的位置:网站首页 matlab界面自己变小了 基于MATLAB GUI界面的串口小助手

基于MATLAB GUI界面的串口小助手

2024-06-12 11:43| 来源: 网络整理| 查看: 265

文章目录 序一、简介二、步骤1.创建一个空白GUI界面2.拖入组件,进行搭建3.编辑m文件 总结

将单片机传感器采集到的数据直接输入MATLAB进行运算分析,不仅适合仿真,在实际测试中,也能提高调试效率。

一、简介

本文搭建的串口助手具体用于四旋翼多轴传感器数据的采集,能够发送、收集和保存数据,控制单片机只发送加速度计、陀螺仪或者磁力计的三轴数据,并对传来的数据进行绘制。 GUI界面设计主要分为两个部分,一是拖入组件,设置参数;二是编辑m文件,其实就是为组件编写回调函数。在满足必要功能的前提下追求简洁美观,即内外兼修。

二、步骤 1.创建一个空白GUI界面

在MATLAB命令窗输入guide,在弹出的界面中选择Blank GUI(Default)。

在这里插入图片描述

2.拖入组件,进行搭建

左侧工具栏为可选组件,鼠标放在某个组件上会有组件描述,选择需要的组件拖入工作区即可。本文串口界面如下:

在这里插入图片描述 双击组件,修改组件参数,主要修改Tag、String两个参数。String和Tag可以说都代表组件的名字,String在可视化界面显示,Tag在回调函数中发挥作用。Tag并非必须要改(静态文本可不修改),但是赋予每个组件ID,而不是pushputton1、pushbutton2…,可以防止写回调函数时混乱,也显得比较专业。 几点提示: 1)利用工作区上方工具栏中"串"工具,可以调整各组件相对位置。 2)想要GUI界面多一点控件,点击工作区上方工具栏中Toolbar Editor,可以选择添加。或者一键变为常见figure界面,点击Property Inspector或者GUI界面双击工作区空白地方,ToolBar选项选择figure。 3)GUI界面实现最大最小化,一种方法是:GUI界面Tools->GUI Options->Resize behavior,选择Proportional->OK! 下面简单列几个组件的设置,看图说话^ ^ 多图预警!!! 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 也可以自己调整组件颜色、字体颜色、大小等,比较简单,不再赘述。

3.编辑m文件

GUI界面返回的m文件即是GUI界面的灵魂所在。刚开始接触GUI界面时,看着满是注释的函数一筹莫展,这都啥玩意儿!!! 但是!一旦悟到它的本质,编写起来可谓行云流水(好8,还是会因为某些逻辑问题步履蹒跚)。在m文件中,我们要做的就是编写各组件的回调函数,并实现组件间的“通信”。回调函数决定了这个组件能够实现的功能,通过鼠标点击等行为触发;各组件通过句柄函数(handles.Tag)进行参数传递,set是设置,get是获取。如果某个值需要在多个组件的回调函数中调用,可以将该值设为全局变量,需在每个回调函数中提前声明。 m文件开头有OpeningFcn函数,可以认为它是在启动GUI界面时实现对界面的初始化。本文OpeningFcn函数如下:

function SerialGUI2_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to SerialGUI2 (see VARARGIN) % Choose default command line output for SerialGUI2 handles.output = hObject; % handles structure with handles and user data (see GUIDATA) global port global baud global datbit global stobit global parit scoms = instrfind; %读取所有存在的端口 if ~isempty(scoms) stopasync(scoms); fclose(scoms); delete(scoms); %停止并且删除串口对象 end fsom = instrhwinfo('serial'); port = cell2mat(fsom.SerialPorts); baud = 115200; datbit = 8; stobit = 1; parit = 'None'; set(handles.serialcom,'String',port); set(handles.Baud,'Value',5); set(handles.databit,'Value',4); set(handles.stopbit,'Value',1); set(handles.parity,'Value',1); % Update handles structure guidata(hObject, handles); % UIWAIT makes SerialGUI2 wait for user response (see UIRESUME) % uiwait(handles.figure1);

为节省篇幅,现列出部分关键组件回调函数。 1)打开/关闭串口按钮:

% --- Executes on button press in openserial. function openserial_Callback(hObject, eventdata, handles) % hObject handle to openserial (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global scom global go str1 = get(handles.openserial,'String'); if(iscell(str1)) str = str1{1}; else str = str1; end if str == '打开串口' global port global baud global datbit global stobit global parit scom = serial(port); scom.InputBufferSize = 2000; %设置好缓冲区空间,足够最多一次指令返回数据的存储 scom.timeout = 0.1; scom.BaudRate = baud scom.DataBits = datbit scom.Parity = parit scom.StopBits = stobit scom.ByteOrder = 'bigEndian'; fopen(scom); %打开串口设备对象 fprintf("open serial success"); set(handles.openserial,'String','关闭串口'); go = 1; elseif str == '关闭串口' go = 0; set(handles.openserial,'String','打开串口'); display(scom); fclose(scom); delete(scom); fprintf("close serial success"); end

2)发送数据按钮:

% --- Executes on button press in datasend. function datasend_Callback(hObject, eventdata, handles) % hObject handle to datasend (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global sdata global scom data1 = get(handles.SenDataAera,'String'); if(iscell(data1)) sdata = data1{1}; else sdata = data1; end if sdata == 'acc' set(handles.SenDataAera,'String',sdata); fwrite(scom,'01'); elseif sdata == 'gyro' set(handles.SenDataAera,'String',sdata); fwrite(scom,'02'); elseif sdata == 'mag' set(handles.SenDataAera,'String',sdata); fwrite(scom,'03'); else fwrite(scom,sdata); end

3)接收数据按钮

% --- Executes on button press in datareceive. function datareceive_Callback(hObject, eventdata, handles) % hObject handle to datareceive (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global scom global rdata global go global Rdata i = 0; rdata = []; while 1 if go rdata1 = fscanf(scom,'String'); %接收数据 if ~isempty(rdata1) i = i + 1; rdata = [rdata; str2num(rdata1)]; Rdata = rdata; set(handles.RecDataArea,'String',num2str(rdata)); end pause(0.01) else fprintf("over"); break end end

本文工程下载地址:https://download.csdn.net/download/weixin_41869763/13781154,需积分

总结

本文介绍了基于MATLAB GUI平台设计的串口助手,目前已实现发送指令、接收相应数据、绘制图像、保存数据等功能。后面将进一步完善,将数据分析可视化展示。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3