Я пытаюсь сделать таймер, который отсчитывает от 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)