2017-01-09 1 views
1

Я пытаюсь сделать таймер, который отсчитывает от 20 до 0 (секунд) в GUIDE. Тем временем пользователь выполнит простое действие (щелкнув переключатель в кнопке группы), и в конце этого 20 секунд появится сообщение (в зависимости от того, какая кнопка нажата пользователем). Я огляделся, но кажется, что для GUIDE нет объекта таймера (почему бы ему не сделать его, так как это так полезно?). Однако я попытался сделать один, а ниже - результат, он не работает. I инициализируется setappdata в MyGUI_OpeningFcn:Как сделать таймер обратного отсчета в MATLAB GUIDE?

% Initialize setappdata 
timeout = 20; 
setappdata(handles.figure1,'timeout', timeout); 

Next_calculation кнопка радио и timerBox статический текст.

function Next_calculation_Callback(hObject, eventdata, handles) 
[..] 
timeout = getappdata(handles.figure1,'timeout'); 
t = timer('Period', 1.0,... % 1 second 
      'StartFcn', set(handles.timerBox,'String',num2str(timeout)), ... 
      'ExecutionMode', 'fixedRate', ... % Starts immediately after the timer callback function is added to the MATLAB execution queue 
      'TasksToExecute', timeout, ... % Indicates the number of times the timer object is to execute the TimerFcn callback 
      'TimerFcn', @my_timer ... % callback to function 
     ); 
start(t) 

Как только начинается таймер, он вызывает TimerFcn, что вызывает my_timer. Я должен передать дескриптор my_timer, но я точно не знаю, как это сделать.

function my_timer(hObject, eventdata) 
% I think I'm supposed to pass (hObject, eventdata) to my_timer 

% handles should be getting the current figure from hObject 
handles = guidata(ancestor(hObject, 'figure1')); 

timeout = getappdata(handles.figure1,'timeout'); 
t_left = timeout - 1.0; 
% show the updated time 
set(handles.timerBox,'String',num2str(t_left)); 
% update 'timeout' 
setappdata(handles.figure1,'timeout',t_left) 

ответ

2

Вы должны использовать пользовательские анонимные функции для TimerFcn передать необходимые данные для обратного вызова таймера

set(t, 'TimerFcn', @(s,e)my_timer(hObject, handles)) 

Затем вы можете определить my_timer обратного вызова в качестве

function my_timer(hObject, handles) 
    % Do stuff with handles 
end 
Смежные вопросы