Matlab GUI 秒表

Matlab GUI 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

我知道这可能看起来微不足道,但我不知道如何做得更好。感谢您的帮助!

这里有两个问题。首先是 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