Matlab Gui用popmenu更新情节

时间:2014-09-02 01:03:11

标签: matlab matlab-guide

我有一个matlab Gui程序,它从串口获取输入数据并将它们绘制在一个图形中。 Gui有几个标签。在第二个标签中,我有一个popmenu,允许我选择要绘制的数据。

回调函数

function popupCallback(src,~)
    val = get(src,'Value');
    % Second tab selected
    if val == 2
        try
            while (get(xbee, 'BytesAvailable')~=0 && tenzo == true)
                % reads until terminator
                sentence = fscanf( xbee, '%s');

                % Collect data to plot
                getDataRoutine(sentence)

                %Plot them            
                h1 = subplot(3,1,1,'Parent',hTabs(3));
                plot(h1,index,gxdata,'r','LineWidth',2);
                h2 = subplot(3,1,2,'Parent',hTabs(3));
                plot(h2,index,gydata,'b','LineWidth',2);
                h3 = subplot(3,1,3,'Parent',hTabs(3));
                plot(h3,index,gzdata,'g','LineWidth',2);
            end
        end
    end

当我在popmenu中选择第二个选项时,分析串行中的字符串,数据存储在变量中然后绘制。细

问题:

仅当我点击popmenu中的第二个选项时才会绘制数据。如何在实时'中获取数据?

2 个答案:

答案 0 :(得分:0)

关键是您要使用的触发事件。如果您希望在选择第二个选项卡时自动更新它,则应该采取操作“选择第二个选项卡”作为更新绘图的触发事件。

答案 1 :(得分:0)

好的,我使用三个计时器以0.1s的恒定速率执行绘图任务

首先声明计时器。

global gyroTimer;
gyroTimer = timer('ExecutionMode','FixedRate','Period',0.1,'TimerFcn',{@graphGyro});

global angleTimer;
angleTimer = timer('ExecutionMode','FixedRate','Period',0.1,'TimerFcn',{@graphAngles});

global accTimer;
accTimer = timer('ExecutionMode','FixedRate','Period',0.1,'TimerFcn',{@graphAcc});

在popmenu回调函数中,当选择相应的选项时启动右计时器

% drop-down menu callback
function popupCallback(src,~)
    %# update plot color
    val = get(src,'Value');

    % Gyro
    if val == 2            
        start(gyroTimer);
        stop(angleTimer);
        stop(accTimer);
    end

    % Accelerometer
    if val == 3
        stop(gyroTimer);
        stop(angleTimer);
        start(accTimer);                    
    end

    % Magnetometer
    if val == 4
       stop(gyroTimer);
       start(angleTimer);
       stop(accTimer); 
    end
end

创建绘图功能

function graphAngles(obj,event,handles)
    % To debug uncomment the following line
    %disp('Angles');

    h1 = subplot(3,1,1,'Parent',hTabs(3));
    plot(h1,index,Tdata,'r','LineWidth',2);
    hold on;
    plot(h1,index,EKXdata,'b-','LineWidth',1);
    hold off;

    h2 = subplot(3,1,2,'Parent',hTabs(3));
    plot(h2,index,Pdata,'r','LineWidth',2);
    hold on;
    plot(h2,index,EKYdata,'b-','LineWidth',1);
    hold off;

    h3 = subplot(3,1,3,'Parent',hTabs(3));
    plot(h3,index,Ydata,'r','LineWidth',2);
end

完成!