我已经创建了一个按钮,按下该按钮将数据发送到微控制器,另一个按下按钮需要向微控制器发送'g'。但问题是如何使用相同的串行通信对象发送数据。我尝试使用guidata传递s但是没有用。 谁能帮忙。我是matlab的新手。
matlab代码:
//第一个按钮
function start_Callback(hObject, eventdata, handles)
s = serial('COM2');
set(s,'BaudRate',9600);
set(s,'Timeout',10);
set(s,'ReadAsyncMode','continuous');
fopen(s);
fprintf(s,'%c','s');
guidata(hObject,s);
//第二个按钮
function stop_Callback(hObject, eventdata, handles)
s = guidata(hObject);
fopen(s);
fprintf(s,'%c','g');
fclose(s)
delete(s)
答案 0 :(得分:1)
您没有以正确的方式使用guidata
和handles
。我认为你需要这样的东西:
//第一个按钮
function start_Callback(hObject, eventdata, handles)
s = serial('COM2');
set(s,'BaudRate',9600);
set(s,'Timeout',10);
set(s,'ReadAsyncMode','continuous');
fopen(s);
fprintf(s,'%c','s');
handles.s = s;
guidata(hObject,handles);
//第二个按钮
function stop_Callback(hObject, eventdata, handles)
s = handles.s;
fopen(s);
fprintf(s,'%c','g');
fclose(s)
delete(s)
这样想。 handles
是一个大变量(一个结构),它包含对每个字段中GUI的所有部分的引用。
它存储在GUI的父图中,并传递给每个GUI回调,以便回调函数可以在需要时引用GUI的各个部分。
您还可以在handles
字段中存储您自己的内容(此处我们已将您的序列对象s
存储在名为handles.s
的字段中) - 但如果您这样做,则需要在函数结束前刷新handles
,以便以后的回调获得更新版本。这就是guidata
的作用 - 它将更新后的handles
推送到hObject
的祖先,这是GUI的父图。完成后,稍后的回调(例如stop_callback
)会获得更新的handles
,现在已将s
存储在字段中,并且可以对其进行检索和使用。