Matlab GUI (使用 animatedline 对象)
最近在用Matlab的GUI做串口数据的实时显示,做的还不是很成熟,在做实时显示使用了 animatedline 函数进行实现的。现在还存在着很多的问题,先把一个问题po上来。(本人菜狗,也刚学没多久,有问题的话多多指教)
h1 = animatedline('Color','r');h2 = animatedline('Color','b');x=1:10;y1=sin(x);y2=cos(x);for i = 1:2for j=1:5addpoints(h1,x(j+5*(i-1)),y1(1,j+5*(i-1)));addpoints(h2,x(j+5*(i-1)),y2(1,j+5*(i-1)));drawnow;endend
该类实现方法可以多次循环,面对GUI上多个坐标轴内的数据需要反复绘制时,不会出现波形中有断开的问题(循环前后中间无法连接的问题)
而一开始我用的是直接用一行代码代替顺序执行,但是一直出现波形断开的问题,例如这样的代码addpoints(h(n),x(j+5*(i-1)),y2(1,j+5*(i-1)));
for i = 1:2for j=1:5addpoints(h(i),x(j+5*(i-1)),y(1,j+5*(i-1)));drawnow;endend
但这样编的话,x=5与x=6处的点没有连接到,波形呈现断开的状态(简略写了一下,有点忘了当时是怎么写的来着)
总结
最后试了直接将h1,h2各写一遍来实现(第一个程序),但出现了再次读取数据再次进入该循环时候,两次循环数据的尾与头仍无法相连的问题。
搜了无数教程发现,一般是将数据全添加进去再进行画图的,例如:
h1 = animatedline('Color','r');h2 = animatedline('Color','b');x=1:10;y1=sin(x);y2=cos(x);for i = 1:10addpoints(h1,x(i),y1(i));addpoints(h2,x(i),y2(i));drawnow;end
此处的数据是从一开始到结尾,就不会存在断开的问题,在GUI试了一下,再次循环还是从一开始到最后,暂时好像速度还可以,就先用这个试试了,不太明白具体机制是什么。
如果觉得《Matlab GUI animatedline 串口实时》对你有帮助,请点赞、收藏,并留下你的观点哦!