我想连续存储从串口接收的数据,以便在图表中绘制它们。我试过在while循环中收集数据
while (get(serial, 'BytesAvailable')~=0)
storeAndPlot()
end
但程序无法同时执行其他任务。
在这个question中,他们使用计时器来指定执行函数之间的延迟(以秒为单位)。这可以是使用短周期(例如0.1)来调用getDataFromSerialFunction()并更新图形的解决方案。
一旦数据可从串口获得,是否有一种回调函数可以调用?
答案 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&滚!