2014-12-29 92 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