MATLAB读取串口数据(二)GUI
MATLAB读取串口数据(二)GUI前面我分享了利用MATLAB编写脚本来读取串口数据的方法,今天我来分享利用MATLAB中的GUI工具来进行串口上位机开发,并实时作图。注:在用了一段之间MATLAB的GUI工具后,突然发现了MATLAB中一个更好用的APP设计工具,还有用simulink快速制作上位机的方法,非常的好用,之后会和大家一一分享。前面的文章中我已经介绍了GUI的基本使用方法,和脚本读
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来制作串口接收上位机的方法,非常简单。
更多推荐
所有评论(0)