MATLAB读取串口数据(二)GUI

前面我分享了利用MATLAB编写脚本来读取串口数据的方法,今天我来分享利用MATLAB中的GUI工具来进行串口上位机开发,并实时作图。

注:在用了一段之间MATLAB的GUI工具后,突然发现了MATLAB中一个更好用的APP设计工具,还有用simulink快速制作上位机的方法,非常的好用,之后会和大家一一分享。

前面的文章中我已经介绍了GUI的基本使用方法,和脚本读取串口的一些基本方法,所以今天就不再赘述,直接开始。

首先当然是“GUIDE”,创建自己需要的控件,下面是我做的界面,大家可以参考。

在这里插入图片描述
这里有一个之前没用过的控件,列表框,我们来学习一下如何使用。
在这里插入图片描述双击控件,点击“String”右边这个按钮,就会出来编辑窗口了,在每一行输入自己需要的东西,在列表框里就会显示出来了。

其他控件的功能和使用方法相信大家学习了我前面的文章都可以懂,下面直接进入回调函数部分:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global S
global S_DKH
global S_BTL
global stop_flag
global i
global S_date
global a

try
    S=serial(S_DKH,'Parity','none','BaudRate',S_BTL,'DataBits',8,'StopBits',1)   
    fopen(S)
    set(handles.text2,'string','打开串口成功')
    S_date = []
catch
    set(handles.text2,'string','打开串口失败')
end

    stop_flag = 1
    i = 1
    while(1)
        pause(0)
        if(stop_flag == 0)
            break
        end
        if(stop_flag == 1)
            pause(0)
            try
                a = fscanf(S)        
                S_date(i) = str2num(a)
                set(handles.edit2,'string',S_date)
                set(handles.text3,'string',i)
                plot(handles.axes1,S_date)
                i = i+1
            catch
                a = fscanf(S)        
                S_date(i) = str2num(a)
                set(handles.edit2,'string',S_date)
                plot(handles.axes1,S_date)
                i = i+1
            end
        end
        
    end

这是打开串口按钮的回调函数,在这里面进行数据显示及画图。为了避免串口连接不上等问题而导致崩溃,我们使用“try-catch”语句来增强其稳定性。而且由于串口是按字符接收的,所以我们需要将其转化为数字类型。在发送数据时,数据后面加上换行回车,将数据放到数组中时就会自动分开存放了。

global stop_flag

try
    stop_flag = 0
    delete(instrfindall)
    set(handles.text2,'string','关闭串口成功')
    pause(0)
catch
    set(handles.text2,'string','关闭串口失败')
end

关闭串口按钮的回调函数。

选择串口:

global DKH
global S_DKH
global S_DKH1

DKH = [1,2,3,4,5,6]
S_DKH1 = DKH(get(handles.popupmenu1, 'Value'))
S_DKH = ['COM',num2str(S_DKH1)]```

选择波特率:

global BTL
global S_BTL
BTL = [9600,115200]
S_BTL = BTL(get(handles.popupmenu2, 'value'))

这里我添加了一个显示已接收数据数量的文本框:

global i
i = 0
cla(handles.axes1)
set(handles.edit2,'string','')

这个GUI也是一个基础版本,还存在一些BUG,不过大家也可以拿来学习,
后面会教给大家用simulink来制作串口接收上位机的方法,非常简单。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐