我正在尝试使用GUIDE创建GUI,GUIDE通过串行通信读取字符串。之后,它会删除所需的数字并将其放在屏幕上。我创建了这个函数,每当COM端口缓冲区中有一行数据时执行该函数:
function out = intcon1(hObject, eventdata, handles)
global comPort;
a=fgetl(comPort);
disp(a);
a(a==' ') = '';
indexstart=strfind(a,'[');
indexend=strfind(a,']');
measureddata=a(indexstart(1):indexend(1));
commas=strfind(measureddata,',');
re1data=measureddata(2:(commas(1)-1));
re2data=measureddata((commas(1)+1):(commas(2)-1));
im1data=measureddata((commas(2)+1):(commas(3)-1));
im2data=measureddata((commas(3)+1):(commas(4)-1));
temp1data=measureddata((commas(4)+1):(commas(5)-1));
temp2data=measureddata((commas(5)+1):(commas(6)-1));
old_str=get(handle.re1, 'String');
new_str=strvcat(old_str, re1data);
set(handles.listbox8, 'String', re1data);
现在我正在尝试将数据放入列表框中。这只是第一个值。问题是,Matlab一直说,句柄没有定义。但我已经创建了一个按钮,使用以下代码清除列表框:
function clearlists_Callback(hObject, eventdata, handles)
% hObject handle to clearlists (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.listbox8, 'String', '');
有谁知道问题是什么以及如何解决?
答案 0 :(得分:1)
Serial port callbacks与GUIDE callbacks不同。在串行端口回调的情况下,对象句柄是串行端口对象,事件是串行事件。没有第三个参数,因此handles
未定义。
如果你想从这个功能中检索你的GUI句柄,你需要明确地这样做,类似于你检索comport
句柄的方式 - 偶然得到{{1}这种方式可能是不必要的,因为我想象它是回调已经收到的同一个对象comport
。
由于在这种情况下hObject
是GUIDE-specific data,因此正确的'检索它的方法
将是:
handles
如果您的GUI有多个数字,则可能需要使用handles = guidata(gcf);
代替findobj()
才能获得正确的数据。
答案 1 :(得分:0)
您可能使用函数句柄语法定义了BytesAvailableFCN,而没有其他参数,例如
s.BytesAvailableFCN = @myfun();
相反,您需要使用单元格数组定义回调,如here in the documentation所述。例如,
s.BytesAvailableFCN = {'myFun', handles};
handles
必须已经定义,并且在运行该行时在工作区中。