使用Matlab Gui连续存储串行数据

时间:2014-09-02 10:59:52

标签: matlab serial-port matlab-guide

我想连续存储从串口接收的数据,以便在图表中绘制它们。我试过在while循环中收集数据

while (get(serial, 'BytesAvailable')~=0)
    storeAndPlot()
end

但程序无法同时执行其他任务。

在这个question中,他们使用计时器来指定执行函数之间的延迟(以秒为单位)。这可以是使用短周期(例如0.1)来调用getDataFromSerialFunction()并更新图形的解决方案。

一旦数据可从串口获得,是否有一种回调函数可以调用?

1 个答案:

答案 0 :(得分:1)

好的我已经按照question中的建议使用了计时器对象。

global timerXbee;

% When the connect to serial button is pressed
timerXbee = timer('ExecutionMode','FixedRate','Period',0.1,'TimerFcn',{@storeDataFromSerial});
start(timerXbee);
% Polling
fprintf(xbee,'M') ; 
disp ('Connection established.');

在回调功能

function storeDataFromSerial(obj,event,handles)
   try
        while (get(xbee, 'BytesAvailable')~=0 && tenzo == true)
            % read until terminator
            sentence = fscanf( xbee, '%s'); 
                %decodes "sentence" seperated (delimted) by commas
                decode(sentence);

                % Gets Magnetometer and Estimated Kalman estimated angles
                Tdata = [ Tdata(2:end) ; theta ];
                Pdata = [ Pdata(2:end) ; pitch ];
                Ydata = [ Ydata(2:end) ; yaw ]; 
                EKXdata = [ EKXdata(2:end) ; kr ];
                EKYdata = [ EKYdata(2:end) ; kp ];
            end
        end
   end
end  

按下断开按钮时,只需停止计时器并将其删除

stop(timerXbee);
delete(timerXbee);

Rock&滚!