我是一名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
我知道这看似微不足道,但我不知道怎么做得更好。任何帮助表示赞赏!
答案 0 :(得分:2)
这里有两个问题。第一个是使用tic
和toc
函数。使用start = tic;
您已启动计时器并且它已运行,因此您不需要(并且无法)使用start
启动计时器。现在,此计时器名为start
,您可以使用elapsedTime = toc(start)
停止此计时器。这样,经过的时间会保存在变量elapsedTime
中,您可以将其写入,例如到显示器。
下一个问题是start
是一个局部变量,因此在函数调用后将其删除,并且在调用toc
时无法访问它。它有两种方法:第一种方法是通过在函数开头调用global start
使其成为全局变量。当您有多个实例时,这将导致问题,因此这不是最佳解决方案。最好将变量添加到当前图形的句柄中。回调函数中的handles
参数是数字句柄。您可以通过handles.variable = value
向其添加变量。然后,您需要通过guidata(hObject,handles)
更新句柄。
更小的东西:根据Mathworks,最佳做法是将切换按钮的值与按钮的Max
和Min
属性进行比较,即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