清除matlab中的串行缓冲区

时间:2016-08-17 19:43:20

标签: matlab buffer

我只是在那里打印浮子从我的arduino或任何其他串行输出设备...在matlab我收到它们并绘制它们。它在arduino中打印的速度非常快,但在matlab中它速度较慢,大约一分钟左右后,情节对arduino的数字没有反应...它的接缝matlab速度较慢,它是否将记录保存在缓冲区中?我该如何清除并绘制新数据?

另外一件事是否有意义,matlab无法导入并绘制100Hz的几个数字?我做错了什么或效率低下?

clc 
clear all
h = figure(1);
set(h,'UserData',1);

s=serial('/dev/tty.usbmodem1411','BaudRate',115200);
set(s,'DataBits',8);
set(s,'StopBits',1);
fopen(s);
s.ReadAsyncMode='continuous';
readasync(s);
tStart = tic;
xplot=subplot(3,1,1);
hold on;
xlabel('time(ms)');
ylabel('X angle(deg)');
yplot=subplot(3,1,2);
hold on;
xlabel('time(ms)');
ylabel('Y angle(deg)');
zplot=subplot(3,1,3);
hold on;
xlabel('time(ms)');
ylabel('Z angle(deg)');

cont=true;
xAngle = zeros(1,1000000);
 yAngle = zeros(1,1000000);
zAngle = zeros(1,1000000);
i=0;
while(true)
i=i+1;
    t = toc(tStart);
%angle = fscanf(s, '%f');
[x y z] = strread(fgetl(s,s.BytesAvailable),'%f %f %f');
plot(xplot,t,x,'.');

plot(yplot,t,y,'.');

plot(zplot,t,z,'.');

drawnow;

端    FCLOSE(一个或多个);

1 个答案:

答案 0 :(得分:0)

'plot'命令的速度很可能是问题所在。创建新绘图是一个缓慢的操作,因此在您收到几个点后,创建绘图所需的时间会变大。如果你想在matlab中绘制“实时”数据,你需要使用一些方法,如this question中讨论的那样。

您可以通过更改循环代码以从设备读取数据来调查情况,只需在屏幕上打印该行而不绘制它。我希望您会看到这些数字可以按照收到的速度打印。