Я знаю, что обратные вызовы графического интерфейса Matlab обсуждались здесь сотни раз, но я думаю, что столкнулся с особой проблемой.
Я знаю, как обмениваться данными между различными обратными вызовами графического интерфейса (я использую структуру дескрипторов, как описано в документацию). Я создал свой графический интерфейс с помощью GUIDE.
Есть одна кнопка, которая создает дескриптор bluetooth в своей функции обратного вызова, которая отлично работает. Как только соединение Bluetooth установлено и получено определенное количество байтов, запускается функция обратного вызова Bluetooth (устанавливается bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback
).
Заголовок моей функции обратного вызова Bluetooth выглядит так:
function rdatac_Callback(hObject, eventdata)
hObject
содержит дескриптор bluetooth, eventdata
событие, вызвавшее обратный вызов (в данном случае оно называется «BytesAvailable»).
Эта функция находится в том же файле, что и все другие обратные вызовы GUI. Проблема в том, что я не могу получить доступ к структуре дескрипторов графического интерфейса в обратном вызове bluetooth. Я попытался добавить «ручки» в качестве третьего входного параметра, но тогда он пуст. Я также попытался создать свою собственную структуру дескрипторов с помощью
h = guidata(findobj('Name','BCI'));
где BCI — имя окна GUI. Это отлично работает в любой функции обратного вызова с графическим интерфейсом, но внутри обратного вызова Bluetooth он не может найти другие элементы, поэтому обратный вызов Bluetooth имеет свою собственную «область действия».
Итак, мой вопрос: как я могу поделиться всеми дескрипторами графического интерфейса с моей функцией обратного вызова Bluetooth? Мой обходной путь заключался в использовании глобальной рабочей области, но я хотел бы использовать структуру дескрипторов, если это возможно.