如何在 MATLAB GUIDE 中制作倒数计时器?

How to make a countdown timer in MATLAB GUIDE?

我正在尝试在 GUIDE 中制作一个从 20 倒数到 0(秒)的计时器。在此期间,用户将执行一个简单的操作(单击组按钮中的单选按钮),并在 20 秒结束时显示一条消息(取决于用户单击的按钮)。 我环顾四周,但似乎没有用于 GUIDE 的计时器对象(他们为什么不制作一个,因为它非常有用??)。但是我试着做了一个,下面是结果,它不起作用。 我在 MyGUI_OpeningFcn:

中初始化了 setappdata
% 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)

您需要使用自定义匿名函数 TimerFcn 将必要的数据传递给您的计时器回调

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

然后您可以将 my_timer 回调定义为

function my_timer(hObject, handles)
    % Do stuff with handles
end