MATLAB串口通信与动态绘图

MATLAB串口通信

MATLAB本身是支持Serial Port Devices,即串口设备。通过自带的一些函数可以操作串口(读取、写入等)
官方英文教程

然而在实际使用中,我的和官方给出的例子有一些不同。
下面给出一个完整的串口读取的例子:

%新建串口对象
s1=serial('COM15','BaudRate',9600); 

%尝试代开串口
try
  fopen(s1);  %打开串口对象
catch err
  fclose(instrfind);  %关闭被占用的串口
  error('请确认选择了正确的串口');  %输出错误提示
end

a=fscanf(s1,'%d');  %读取数据

fclose(s1);  %关闭串口

动态绘图

要实现读取一个数据,然后实时更新图像。而不是已知所有点坐标再进行绘图。

动态曲线

h = animatedline;  %创建空白动态曲线
axis([0 40 5 30])  %设置坐标系范围
x = linspace(0,40,800);

xlabel('时间');
ylabel('距离');

for k = 1:length(x)
    y = (fscanf(arduino,'%d')/100.0);
    addpoints(h,x(k),y);
    drawnow
end

可以实现从串口实时读取数据并进行显示。最终效果类似心电图。

动态点坐标

这个挺头疼的。因为我不需要两点之间连线,而是类似随机的散点。
最终用clf的命令解决了问题。代码如下

n = 500;
for i=1:n
    clf;  %清空
    a = (fscanf(s1,'%d')/100.0);
    b = (fscanf(s2,'%d')/100.0);
    plot(px,py,'or','MarkerSize',5,'MarkerFaceColor','r');
    axis([0 40 0 40]);
    drawnow;
end

还有其他动态绘图的方法,比如comet()函数、hold on等用法。可以自行百度。但我之所以不采用这些方法的原因是因为它们的坐标系是会变化的,不固定。

MATLAB初学者,若有不足,请指正。

推荐阅读更多精彩内容