Count the time a toggle button is pressed down

Hello,
I would like to know how can I create a timer that will only be activated when a toggle button is pressed down. It will of course start from 0 as the button is up when I launch the GUI, but when I press the button, I would like the timer to start, and then stop when I press it again. Then, I would like the timer to resume when I press the toggle button down again, and so on.
How can I do that?
Thanks!

回答(1 个)

I use tic and toc to start and stop timers
>> help tic
tic Start a stopwatch timer.
tic and TOC functions work together to measure elapsed time.
Run tic and a timer starts. Then everytime you run toc , it tells you how much time since the last tic.
What I would do is run tic and toc to measure how long the toggle was down. Save that value to a variable. Then each time you do that another time, add the new tic/toc difference to your running variable of total time.

3 个评论

The reason your code in the other answer doesn't work is because your while loop never 'ends'. So your function starts, enters the while loop, then it keeps running tic infinite times and never displays toc. Eventually you try to press the button again but you are still stuck in the while loop from the first time.
If your functions are interruptable then it might cancel your function without ever finishing it.
Also, don't put 'tic' in the while loop. Each time tic runs it restarts your timer. I'm not sure if that will be beneficial for you in your case.
Lets test something. What happens if you do this
function togglebutton1_Callback(hObject, eventdata, handles)
if get(hObject, 'Value')
tic
disp('timer started')
else
toc
disp(['time elapsed = ',num2str(toc)])
end
Let me know what happens. My only concern is that when the function runs a second time you lose your workspace tic/toc values or something.
To make sure that you don't 'lose your workspace tic/toc values or something' and to make sure that a tic/toc from another piece of code does not interfere, explicitly use the return value of tic:
function togglebutton1_Callback(hObject, eventdata, handles)
persistent t;
if get(hObject, 'Value')
t = tic
disp('timer started')
else
elapsedtime = toc(t);
fprintf('time elapsed = %f', elapsedtime);
end
end
Nice Guillaume.
Any updates Matt..?

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Startup and Shutdown 的更多信息

提问:

2014-12-2

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by