2014-12-29 30 views
2

我知道Matlab GUI回调已经在这里讨论了数百次,但我想我遇到了一个特殊的问题。Matlab GUI中嵌套的蓝牙回调

我知道如何在不同的GUI回调之间共享数据(我使用documentation中描述的手柄结构)。我用GUIDE创建了我的GUI。

有一个按钮,在其回调函数中创建一个蓝牙手柄,它工作得很好。一旦蓝牙连接建立并收到一定数量的字节,就会触发蓝牙回拨功能(由bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback设置)。

我的蓝牙回调函数的头看起来是这样的:

function rdatac_Callback(hObject, eventdata) 

hObject包含蓝牙手柄,eventdata由此引发的回调(在这种情况下,它被称为“信息bytesAvailable”)的事件。

此函数与所有其他GUI回调位于同一个文件中。问题是我无法访问蓝牙回调内的GUI的句柄结构。我尝试添加“手柄”作为第三个输入参数,但它是空的。我也尝试通过生成我自己的句柄结构

h = guidata(findobj('Name','BCI')); 

其中BCI是GUI窗口的名称。这在任何GUI回调函数中都可以很好地工作,但在蓝牙回调中它无法找到其他元素,所以蓝牙回调函数有它自己的“范围”。

所以我的问题是:我如何与我的蓝牙回调函数共享所有的GUI句柄?我的解决方法是使用全局工作区,但我希望尽可能使用句柄结构。

回答

0

使用签名功能rdatac_Callback(hGuiObject, hBtObject, eventdata)创建蓝牙回叫。现在,在您的GUI-Callback中创建蓝牙对象时,您将拥有GUI对象的句柄。这应该传递给你的rdatac_Callback。您可以使用功能手柄@(hBtObject,eventdata)rdatac_Callback(hGuiObject, hBtObject, eventdata)完成此操作。函数rdatac_Callback总是用您需要的三个参数调用,但只有两个必须传递给匿名函数。 hGuiObject取自您创建匿名函数的工作区。

+0

非常感谢,完美的作品! – Andy

+0

还有一件事:我尝试在我的蓝牙回调中修改字段'handles.data'并将其保存为'guidata(handles.figure1,handles)''就像我在GUI回调中所做的那样(仅用于'因为在Bluetooth回调中没有'hObject'),所以这里不使用'hObject',而是数据永远不会被存储。每次触发Bluetooth-callback时,handles.data都是空的。我在GUI打开Fcn中使用'handles.data = [];'在'handles'结构中声明这个新字段。 – Andy