【问题标题】:Nested Bluetooth callback in Matlab GUIMatlab GUI 中的嵌套蓝牙回调
【发布时间】:2015-02-25 19:26:29
【问题描述】:

我知道 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 句柄?我的解决方法是使用全局工作区,但如果可能的话,我想使用句柄结构。

【问题讨论】:

    标签: matlab user-interface bluetooth callback handles


    【解决方案1】:

    使用签名函数rdatac_Callback(hGuiObject, hBtObject, eventdata) 创建您的蓝牙回调。现在,当您在 GUI-Callback 中创建蓝牙对象时,您就拥有了 GUI-Object 的句柄。这应该传递给您的 rdatac_Callback。您可以使用函数句柄@(hBtObject,eventdata)rdatac_Callback(hGuiObject, hBtObject, eventdata) 来实现这一点。函数rdatac_Callback 始终使用您需要的三个参数调用,但只有两个必须传递给匿名函数。 hGuiObject 取自您创建匿名函数的工作区。

    【讨论】:

    • 还有一件事:我尝试在我的蓝牙回调中修改字段 handles.data 并用 guidata(handles.figure1,handles) 保存它,就像我在 GUI 回调中所做的那样(只是我使用了 handles.figure1这里不是hObject,因为蓝牙回调中没有hObject),但数据永远不会存储。每次触发蓝牙回调时,handles.data 为空。我在 GUI Opening Fcn 中使用了handles.data = [];,在handles 结构中声明了这个新字段。
    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2017-08-06
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多