Matlab GUI中的嵌套蓝牙回调

时间:2014-12-29 15:37:58

标签: matlab user-interface bluetooth callback handles

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

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

有一个按钮在其回调函数中创建一个蓝牙手柄,它可以正常工作。建立蓝牙连接并接收到一定量的字节后,将触发蓝牙回调功能(由bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback设置)。

我的蓝牙回调功能的标题如下所示:

function rdatac_Callback(hObject, eventdata)

hObject包含bluetooth-handle,eventdata触发回调的事件(在本例中称为“BytesAvailable”)。

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

生成自己的句柄结构
h = guidata(findobj('Name','BCI'));

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

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

1 个答案:

答案 0 :(得分:0)

使用签名函数rdatac_Callback(hGuiObject, hBtObject, eventdata)创建蓝牙回调。现在,在GUI-Callback中创建蓝牙对象时,您可以获得GUI对象的句柄。这应该传递给你的rdatac_Callback。您可以使用函数句柄@(hBtObject,eventdata)rdatac_Callback(hGuiObject, hBtObject, eventdata)来实现此目的。函数rdatac_Callback总是使用您需要的三个参数调用,但只有两个必须传递给匿名函数。 hGuiObject取自您创建匿名函数的工作空间。