2014-12-29 5 views
2

Matlab GUI 콜백은 여기에서 수 백 번 논의되었지만 특별한 문제가 발생했다고 생각합니다.Matlab GUI에서 중첩 된 블루투스 콜백

다른 GUI 콜백간에 데이터를 공유하는 방법을 알고 있습니다. (나는 documentation에서 설명한대로 handles-structure를 사용합니다). GUI로 GUIDE를 만들었습니다.

콜백 함수에 블루투스 핸들을 생성하는 푸시 버튼이 하나 있는데, 이는 제대로 작동합니다. 블루투스 연결이 설정되고 일정량의 바이트가 수신되면 블루투스 콜백 기능이 실행됩니다 (bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback으로 설정).

내 블루투스 콜백 함수의 헤더는 다음과 같습니다

hObject
function rdatac_Callback(hObject, eventdata) 

는 블루투스 핸들, (그것은 "됨 bytesAvailable"라고이 경우) 콜백을 트리거 eventdata 이벤트를 포함합니다.

이 기능은 다른 모든 GUI 콜백과 동일한 파일에 있습니다. 문제는 블루투스 콜백 내에서 GUI의 핸들 구조에 액세스 할 수 없다는 것입니다. 세 번째 입력 매개 변수로 "handles"을 추가하려고 시도했지만 비어 있습니다. 또한 자신의 핸들 구조를 생성하려고 시도했습니다.

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

여기서 BCI는 GUI 창의 이름입니다. 이것은 모든 GUI 콜백 기능에서 완벽하게 작동하지만, 블루투스 콜백 내부에서는 다른 요소를 찾을 수 없으므로 블루투스 콜백은 고유 한 "범위"를 갖습니다.

내 질문은 : 어떻게 모든 블루투스 콜백 기능과 함께 GUI를 처리 할 수 ​​있습니까? 내 해결 방법은 글로벌 작업 공간을 사용했지만 가능하면 핸들 구조를 사용하고 싶습니다.

답변

0

서명 기능이 rdatac_Callback(hGuiObject, hBtObject, eventdata) 인 블루투스 콜백을 만드십시오. 이제 GUI에서 블루투스 객체를 생성 할 때 콜백을 사용하면 GUI 객체를 처리 할 수 ​​있습니다. 이것은 rdatac_Callback에 전달되어야합니다. 함수 핸들 @(hBtObject,eventdata)rdatac_Callback(hGuiObject, hBtObject, eventdata)을 사용하여이를 수행 할 수 있습니다. 함수 rdatac_Callback은 항상 필요한 세 개의 매개 변수로 호출되지만 익명 함수로 전달되어야하는 매개 변수는 두 개뿐입니다. hGuiObject은 익명 기능을 만든 작업 영역에서 가져온 것입니다.

+0

대단히 고마워요, 완벽하게 작동합니다! – Andy

+0

한 가지 더 : 저는 블루투스 콜백에서'handles.data' 필드를 수정하고 GUI 콜백에서했던 것처럼'guidata (handles.figure1, handles) '와 함께 저장하려고했습니다 (단지' 블루투스 콜백에'hObject'가 없으므로'hObject' 대신에 handles.figure1'을 사용합니다.), 데이터는 저장되지 않습니다. 블루투스 콜백이 트리거 될 때마다'handles.data'는 비어 있습니다. GUI에서 'handles.data = [];'를 사용하여 Fcn을 열고이 새로운 필드를'handles' 구조체에 선언합니다. – Andy