在 MatLab 指南手柄中创建一个新字段

Creating a new field in a MatLab guide handles

我从 MatLab 开始。

我创建了一个指南UI。我继续并假设我可以将新字段添加到创建的句柄结构中。

我可以这样做吗?

例如,当我在我的程序中引用 handle.s 时,我收到一个错误,提示我正在引用一个不存在的字段。

handles.s 的创建是为了存储在初始化我的 PC 和微控制器之间的串行通信的函数中生成的串行端口对象。

串口对象有自己的方法和字段...难道我不能将对象作为字段传递给包含指南属性的句柄对象UI?

这是我正在使用的代码

    function [ s, flag] = setupSerial(comPort)
%Initialize serial port communication between Arduino and Matlab
%Ensure that the arduino is also communicating with Matlab at this time. 
%if setup is complete then the value of setup is returned as 1 else 0.

flag =1;
s = serial(comPort);
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
fopen(s);
a='b';
while (a~='a')
    a=fread(s,1,'uchar');
end
if (a=='a')
    disp('serial read');
end
fprintf(s,'%c','a');
mbox = msgbox('Serial Communication setup.'); uiwait(mbox);
fscanf(s,'%u');
end

在我的 UserInterface.m 文件中,我按如下方式在 claaback 函数中传递对象

function SerialBtn_Callback(hObject, eventdata, handles)
% hObject    handle to SerialBtn (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA
comPort = get(handles.COMportTxt,'String');
if(~exist('serialFlag','var'))
    [handles.s, handles.serialFlag] = setupSerial(comPort);
end
end

当我按下 'Home' 按钮时出现错误。这是回调函数

function HomeButton_Callback(hObject, eventdata, handles)
% hObject    handle to HomeButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
disp('home button pressed');
fprintf(handles.s,'%s', 'G2');
set(handles.CurrentPositionTxt, 'String', '0');
end

我得到的错误如下

Reference to non-existent field 's'.

这里是GUI供大家参考

定义 handles.s 的回调不保存句柄对象。您必须使用 guidata 保存它,以便稍后在另一个回调中可用。

function SerialBtn_Callback(hObject, eventdata, handles)
% hObject    handle to SerialBtn (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA
comPort = get(handles.COMportTxt,'String');
if(~exist('serialFlag','var'))
    [handles.s, handles.serialFlag] = setupSerial(comPort);
end
guidata(hObject,handles)

希望对您有所帮助。