基于MATLAB GUI界面的串口小助手 |
您所在的位置:网站首页 › matlab界面自己变小了 › 基于MATLAB GUI界面的串口小助手 |
文章目录
序一、简介二、步骤1.创建一个空白GUI界面2.拖入组件,进行搭建3.编辑m文件
总结
序
将单片机传感器采集到的数据直接输入MATLAB进行运算分析,不仅适合仿真,在实际测试中,也能提高调试效率。 一、简介本文搭建的串口助手具体用于四旋翼多轴传感器数据的采集,能够发送、收集和保存数据,控制单片机只发送加速度计、陀螺仪或者磁力计的三轴数据,并对传来的数据进行绘制。 GUI界面设计主要分为两个部分,一是拖入组件,设置参数;二是编辑m文件,其实就是为组件编写回调函数。在满足必要功能的前提下追求简洁美观,即内外兼修。 二、步骤 1.创建一个空白GUI界面在MATLAB命令窗输入guide,在弹出的界面中选择Blank GUI(Default)。 左侧工具栏为可选组件,鼠标放在某个组件上会有组件描述,选择需要的组件拖入工作区即可。本文串口界面如下:
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"); end2)发送数据按钮: % --- 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); end3)接收数据按钮 % --- 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 |