MATLAB是通用软件,可用于多种应用。在以前的MATLAB教程中,我们已经解释了如何使用MATLAB控制直流电动机,伺服电动机和家用电器。在本教程的此处,我们将学习如何使用MATLAB进行串行通信。对于串行通信的接收端,我们在这里使用Arduino。
在MATLAB和Arduino之间设置串行通信的方式有两种,一种是使用命令窗口,另一种是使用MATLAB GUI。两种方法的Arduino代码将保持不变。如果您不熟悉MATLAB,建议您使用MATLAB进行简单的LED闪烁程序入门,并学习MATLAB中使用的基本术语。
所需组件
- MATLAB安装的笔记本电脑(首选:R2016a或更高版本)
- Arduino UNO
- LED(任何颜色)
- 电阻(330欧姆)
电路原理图
上面在MATLAB和Arduino之间建立串行通信的两种方式的电路图均相同。
使用MATLAB命令窗口的串行通讯
这是在Arduino和MATLAB之间设置串行通信的简单方法。在这里,我们将简单地使用命令窗口将数据从MATLAB串行发送到Arduino,然后Arduino读取传入的串行数据。然后,该串行传输的数据可用于控制连接到Arduino的任何设备。在这里,我们已经将一个LED连接到Arduino,它将根据Arduino串行接收的数据来打开和关闭。
首先,将给定的Arduino代码上传到Arduino UNO中,然后在MATLAB Editor窗口中开始编码。要打开新的编辑器脚本,请单击“ 新建脚本” ,如下图所示:
然后,将以下完整的MATLAB代码复制并粘贴到编辑器窗口中,以实现MATLAB与Arduino之间的串行通信。
用于在Arduino和MATLAB之间进行串行通信的%MATLAB代码 x = serial('COM18','BAUD',9600); fopen(x); go = true; 当 输入=('按1来打开LED灯并按0来关闭LED:'); fprintf(x,a); 如果(a == 2)go = false; 年底结束
在给定的代码中,以下命令用于定义MATLAB中的串行通信。确保com端口号是连接Arduino的端口号,并且在Arduino和MATLAB的代码中都应将波特率设置为相同。
x = serial('COM18','BAUD',9600);
要打开串行端口,请使用以下命令,
fopen(x);
下面的命令用于将数据从MATLAB串行发送到Arduino,其中x表示调用 串行 ,a表示用户输入的值。
fprintf(x,a);
我们使用 while 函数来创建无限循环,并且只要用户输入数字“ 2”,循环就会中断。
当输入=('按1来打开LED灯并按0来关闭LED:'); fprintf(x,a); 如果(a == 2)go = false; 年底结束
完成MATLAB编辑器脚本的编码后,单击“ 运行 ”以运行您的程序,如下图所示,
MATLAB需要几秒钟的时间来处理代码并开始串行通信,直到MATLAB在软件屏幕的左下角显示“ BUSY”消息为止,如下图所示。
现在,您将看到用于发送用户输入的命令窗口,我们已经设置了默认消息,
“按1打开LED,按0关闭LED:”
发送“ 1”以打开LED,发送“ 0”以关闭LED,发送“ 2”以中断操作。您可以为任何任务设置任何数字,只需要做的就是相应地更改Arduino代码。最后给出了完整的Arduino代码。
您可以查看下面的视频,以了解使用命令窗口从MATLAB向Arduino发送串行数据的完整过程 。
使用MATLAB GUI进行串行通讯
为了演示使用MATLAB GUI的串行通信,我们将使用MATLAB创建两个图形按钮来打开和关闭连接到Arduino的LED。单击这些按钮打开和关闭LED,数据将从MATLAB串行发送到Arduino。Arduino将包含用于从MATLAB接收串行数据并根据接收到的串行数据控制LED的代码。Arduino代码将保持与以前的代码相同,唯一的区别是,以前我们通过MATLAB的命令窗口发送串行数据“ 1”和“ 0”,现在相同的数据将通过两个图形按钮的叮当发送。
要启动GUI,请在 命令窗口中 键入以下命令
指南
将会打开一个弹出窗口,然后选择新的 空白GUI ,如下图所示,
现在,选择两个按钮来打开和关闭LED,如下所示,
要调整大小或更改按钮的形状,只需单击它,就可以拖动按钮的各个角。通过双击按钮,可以更改特定按钮的颜色,字符串和标签。我们自定义了两个按钮,如下图所示。
您可以根据需要自定义按钮。现在,当您保存此代码时,将在MATLAB的“ 编辑器”窗口 中生成一个代码。根据您要由Arduino使用MATLAB GUI执行的任务来编辑此代码。因此,下面我们编辑了MATLAB代码。您可以在MATLAB入门教程中了解有关命令窗口,编辑器窗口等的更多信息。
在该项目的最后给出了完整的MATLAB代码,用于在MATLAB和Arduino之间建立串行通信。此外,我们在此处包括要下载的GUI文件(.fig)和代码文件(.m)(右键单击链接,然后选择“将链接另存为…”),您可以根据需要自定义按钮。以下是我们为控制与Arduino连接的LED所做的一些调整。
将以下代码复制并粘贴到行号。74设置串行端口和波特率。
清除所有 全局x; x = serial('COM18','BAUD',9600); 确保波特率和COM端口 与Arduino IDE fopen(x)相同;
其中, fopen(x) 用于打开串行端口以进行串行通信。
向下滚动时,您将看到在GUI中为两个按钮创建了两个功能。现在,根据要在单击时执行的任务,在两个函数中编写代码。
在“ LED开启” 按钮的功能中,将以下代码复制并粘贴在该功能结束之前以将LED开启。如下面的代码所示, fprintf(x,1) 用于将串行数据从MATLAB发送到Arduino串行。在这里,我们向Arduino串行发送“ 1”,如果您检查Arduino代码,您会发现当Arduino在其串行端口上接收到“ 1”时,它会通过将其第13针设为高电平来使LED发光。
全局x; fprintf(x,1);
在“ LED-OFF” 按钮的功能中,将以下代码复制并粘贴到功能结束之前以关闭LED。如下面的代码所示, fprintf(x,0) 用于将串行数据从MATLAB发送到Arduino串行。在这一部分中,我们向Arduino串行发送“ 0”,如果您检查Arduino代码,您会发现Arduino将在其串行端口接收到“ 0”时将其第13针设为低电平来关闭LED。。
全局x; fprintf(x,0);
完成MATLAB GUI编码并根据电路图设置硬件后,只需单击运行按钮即可运行.m文件中的已编辑代码。
MATLAB可能需要几秒钟来做出响应,在MATLAB显示BUSY指示之前,不要单击任何GUI按钮,您可以在屏幕的左下角看到该指示,如下所示,
一切准备就绪后,单击LED-ON和LED-OFF按钮以打开和关闭LED。当按下 LED-ON按钮 ,13个的Arduino的引脚变为高电平,并导致连接到该PIN开始发光,并且当按下 LED-OFF按钮 ,13个的Arduino的引脚变低,这使得LED关闭。
您可以观看下面的视频,以了解使用MATLAB GUI从MATLAB向Arduino发送串行数据的完整过程 。