显示Matlab GUI上的数据,该数据在单独的Matlab函数中不断更新

时间:2015-01-22 23:57:41

标签: matlab user-interface

我在Matlab中有一个功能,它从硬件中获取连续的传感器值。它在新值可用时给出一个标志,我们可以更新包含这些值的变量。以下是模拟此函数正在执行的操作的虚函数。

function example( )
% Example function to describe functionality of NatNetOptiTrack

% Hardware initialization,    
% Retriving real time information continuously

for i = 1:100   %in real time this loop runs for ever
   data = rand(3,6);
   % Send the updated data to gui in each iteration
end

end

我使用指南做了一个gui,如图所示:

enter image description here

因此要显示的数据是3x6矩阵,其中列对应于X Y Z Roll Pitch和Yaw值,而行对应于Objects。

我想在gui上显示此函数的持续更新值。有没有办法可以在我的示例函数中初始化gui并使用循环内的句柄更新输出值。我尝试将示例函数中的gui代码复制为脚本,它能够初始化但无法识别句柄。 我还想在按下按钮时在命令窗口显示当前值。

由于

1 个答案:

答案 0 :(得分:2)

如果启动GUI然后运行该功能,您应该能够获得GUI上控件的句柄,前提是您可以使GUI图形句柄可见并将其标记/名称设置为适当的值。在GUIDE中,打开GUI的Property Inspector并将 HandleVisibility 属性设置为 on ,将 Tag 属性设置为 MyGui (或其他名称)。然后在example.m文件中执行以下操作

function example( )
    % Example function to describe functionality of NatNetOptiTrack

    % get the handle of the GUI
    hGui = findobj('Tag','MyGui');

    if ~isempty(hGui)
        % get the handles to the controls of the GUI
        handles = guidata(hGui);
    else
        handles = [];
    end


    % Hardware initialization,    
    % Retriving real time information continuously

    for i = 1:100   %in real time this loop runs for ever
       data = rand(3,6);

       % update the GUI controls
       if ~isempty(handles)

           % update the controls
           % set(handles.yaw,…);
           % etc.
       end

       % make sure that the GUI is refreshed with new content
       drawnow();
    end
end

另一种方法是将example功能代码复制到GUI中 - 硬件初始化可能发生在GUI的_OpeningFcn中,您可以创建一个(周期性)定时器来与硬件进行通信,获取要在GUI上显示的数据。

对于在按下GUI按钮时显示当前数据,您可以通过使用fprintf将GUI控件的内容写入命令行/窗口来轻松完成此操作。您将需要使example函数可中断,以便按钮可以中断连续运行的循环。你可以通过在循环的每次迭代结束时添加pause调用(一定的毫秒数)来执行此操作,或者只使用上面的drawnow调用(这就是为什么我把它放在if语句之外 - 这样它就会在循环的每次迭代中被调用。

尝试以上操作,看看会发生什么!