2014-09-02 2 views
0

그래프에서 그래프를 그리기 위해 연속적으로받은 데이터를 저장하고 싶습니다. while 루프에서 데이터 수집을 시도했습니다.Matlab Gui에서 연속적으로 데이터를 저장하기

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

그러나이 프로그램은 그 동안 다른 작업을 실행할 수 없습니다.

question에서는 타이머를 사용하여 기능 실행 간 지연 시간 (초)을 지정합니다. 이것은 0.1과 같은 짧은 기간을 사용하여 getDataFromSerialFunction()을 호출하고 그래프를 업데이트하는 솔루션 일 수 있습니다.

데이터를 직렬에서 사용할 수 있도록 호출 할 수있는 종류의 콜백 기능이 있습니까?

+1

글쎄, 나는 시리얼에 대해 아무것도 모른다. 아마도 속성 값 변경 리스너를 사용하면 도움이 될 것입니다.> (문서화되지 않은 _ 매트랩 : 속성 값 변경 리스너) (http://undocumentedmatlab.com/blog/propertyvalue-change-listeners) –

+1

while 루프 안에'pause (0.1)'또는 drawnow가있다. 청취자를 설정하는 것이 올바른 방법 일 것입니다. 데이터 수집 도구 상자가 있으면 도움이 될만한 리스너 기능을 보려면 [here] (http://www.mathworks.com/help/daq/ref/dataavailable.html)를 참조하십시오. – Trogdor

+0

@LuciusDomitiusAhenobarbus, 나는 정중하게 동의하지 않습니다 : "pause (n)을 계속하기 전에 n 초 동안 실행을 일시 중지합니다. 여기서 n은 음이 아닌 실제 숫자입니다." [소스] (http://www.mathworks.com/help/matlab/ref/pause.html) – Trogdor

답변

1

나는이 question에서 제안한 타이머 개체를 사용했습니다. 콜백 함수 연결 해제 버튼을 누르면

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 

에서

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.'); 

는 타이머를 중지하고 락에게 그것을 & 롤

stop(timerXbee); 
delete(timerXbee); 

을 삭제!

관련 문제