如何将串行通信对象从一个回调传递到matlab中的另一个回调

时间:2015-03-05 18:30:28

标签: matlab

我已经创建了一个按钮,按下该按钮将数据发送到微控制器,另一个按下按钮需要向微控制器发送'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)

1 个答案:

答案 0 :(得分:1)

您没有以正确的方式使用guidatahandles。我认为你需要这样的东西:

//第一个按钮

 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存储在字段中,并且可以对其进行检索和使用。