Matlab GUI秒表

时间:2015-02-16 12:35:42

标签: matlab timer stopwatch

我是一名matlab初学者,并且正在努力编程我的第一个秒表GUI。我想创建6个不同的按钮,每个按钮包含一个独立的秒表。我的想法是,如果我按下一个按钮,会启动一个计时器,用于衡量此按钮(toogle按钮)的打开时间,并将此信息保存在.txt文件中。我设法创建了一个创建和保存.txt模板的函数。但是,我很难为每个按钮实现秒表.... 我为此使用了tic和toc函数,但是我得到的错误是我没有正确使用它。

function toogle_Tickets_Callback(hObject, eventdata, handles)
% hObject    handle to toogle_Tickets (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

a = get(hObject,'Value');
start = tic;
stop = toc;
if a == 1
start;

elseif a == 0
stop;

end

我知道这看似微不足道,但我不知道怎么做得更好。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

这里有两个问题。第一个是使用tictoc函数。使用start = tic;您已启动计时器并且它已运行,因此您不需要(并且无法)使用start启动计时器。现在,此计时器名为start,您可以使用elapsedTime = toc(start)停止此计时器。这样,经过的时间会保存在变量elapsedTime中,您可以将其写入,例如到显示器。

下一个问题是start是一个局部变量,因此在函数调用后将其删除,并且在调用toc时无法访问它。它有两种方法:第一种方法是通过在函数开头调用global start使其成为全局变量。当您有多个实例时,这将导致问题,因此这不是最佳解决方案。最好将变量添加到当前图形的句柄中。回调函数中的handles参数是数字句柄。您可以通过handles.variable = value向其添加变量。然后,您需要通过guidata(hObject,handles)更新句柄。

更小的东西:根据Mathworks,最佳做法是将切换按钮的值与按钮​​的MaxMin属性进行比较,即get(hObject,'Max')

最后一个细节:最好为变量赋予有意义的名称,因此a可能不是一个好的选择。当你打电话时,例如buttonState更清楚这个变量中保存了什么。

这一切都给出了:

function toogle_Tickets_Callback(hObject, eventdata, handles)
% hObject    handle to toogle_Tickets (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

buttonState = get(hObject,'Value');

if buttonState == get(hObject,'Max')
    handles.start = tic;
    guidata(hObject,handles);
elseif buttonState == get(hObject,'Min')
    elapsedTime = toc(handles.start);
end