全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 通信网络 >

如何使用MATLAB进行串行通信

时间:2022-11-01 16:38

人气:

作者:admin

标签: 串行通信  arduino  matlab 

导读:如何使用MATLAB进行串行通信-在本教程中,我们将学习如何使用 MATLAB 进行串行通信。对于串行通信的接收端,我们在这里使用Arduino。...

MATLAB 是多功能软件,可用于各种应用。在MATLAB之前的教程中,我们已经解释了如何使用MATLAB来控制直流电机伺服电机和家用电器。在本教程中,我们将学习如何使用 MATLAB 进行串行通信。对于串行通信的接收端,我们在这里使用Arduino

有两种方法可以在MATLAB和Arduino之间设置串行通信,一种是使用命令窗口,另一种是使用MATLAB GUI。两种方法的Arduino代码将保持不变。

所需组件

MATLAB 安装笔记本电脑(偏好:R2016a 或更高版本)

Arduino UNO

指示灯(任何颜色)

电阻器(330欧姆)

电路图

pYYBAGNg2yeAV2X0AADfe5wyeEw289.png

 

poYBAGNg2yiAbXmJAADJ6JkLmqE158.jpg

对于在MATLAB和Arduino之间建立串行通信的两种方法,上面的电路图将保持不变。

使用 MATLAB 命令窗口进行串行通信

这是在Arduino和MATLAB之间设置串行通信的简单方法。在这里,我们将简单地使用命令窗口将数据从 MATLAB 串行发送到 Arduino,然后 Arduino 读取传入的串行数据。然后,这种串行传输的数据可用于控制连接到Arduino的任何内容。在这里,我们将LED连接到Arduino,它将根据Arduino串行接收的数据打开和关闭。

首先,在Arduino UNO中上传给定的Arduino代码,然后在MATLAB编辑器窗口中开始编码。要打开新的编辑器脚本,请单击“新脚本”,如下图所示:

poYBAGNg2ymAMDY0AAAjdgH9J20431.png

然后,将以下完整的 MATLAB 代码复制并粘贴到编辑器窗口中,以便在 MATLAB 和 Arduino 之间进行串行通信。

%MATLAB Code for Serial Communication between Arduino and MATLAB

x=serial('COM18','BAUD', 9600);

fopen(x);

go = true;

while go

 

a= input('Press 1 to turn ON LED & 0 to turn OFF:');

fprintf(x,a);  

if (a == 2)

go=false;

end

end

pYYBAGNg2yyAd_dRAAARTwh2q0I832.png

在给定的代码中,以下命令用于定义 MATLAB 中的串行通信。确保com端口号是Arduino连接的端口号,并且在Arduino和MATLAB的代码中应设置相同的波特率。

x=serial('COM18','BAUD', 9600);

要打开串行端口,请使用以下命令,

fopen(x);

以下命令用于将数据从 MATLAB 串行发送到 Arduino,其中 x 用于调用串行,a 是用户输入的值。

fprintf(x,a);  

我们使用while函数来创建无限循环,每当用户输入数字“2”时,循环就会中断。

while go               

a= input('Press 1 to turn ON LED & 0 to turn OFF:');

fprintf(x,a);  

if (a == 2)

go=false;

end

end

完成 MATLAB 编辑器脚本编码后,单击“RUN”以运行您的程序,如下图所示,

poYBAGNg2y6ACx9QAABCUcDDW7s846.png

MATLAB 需要几秒钟来处理代码并开始串行通信,等到 MATLAB 在软件屏幕的左下角显示“BUSY”消息,如下图所示。

pYYBAGNg2y-ALn58AAAH7ib18G0117.png

现在,您将看到用于发送用户输入的命令窗口,我们已经设置了默认消息,

'Press 1 to turn ON LED & 0 to turn OFF:'

poYBAGNg2y-AVhemAAAJvgcg784454.png

发送“1”打开 LED,发送“0”关闭 LED,发送“2”中断操作。您可以为任何任务设置任何数字,您所要做的就是相应地更改Arduino代码。最后给出了完整的Arduino代码。

pYYBAGNg2zGAeeA2AAAMQnh0sUk266.png

使用 MATLAB GUI 的串行通信

为了演示使用 MATLAB GUI 的串行通信,我们将使用 MATLAB 创建两个图形按钮来打开和关闭连接到 Arduino 的 LED。数据将从 MATLAB 串行发送到 Arduino,单击这些按钮以打开和关闭 LED。Arduino将包含从MATLAB接收串行数据并根据接收到的串行数据控制LED的代码。Arduino 代码将与前一个代码保持相同,唯一的区别是,以前我们通过 MATLAB 的命令窗口发送串行数据“1”和“0”,现在将在两个图形按钮上点击发送相同的数据。

要启动 GUI,请在命令窗口中键入以下命令

guide

将打开一个弹出窗口,然后选择新的空白GUI,如下图所示,

pYYBAGNg2ziAFNv3AABOs6A7usY276.png

现在选择两个按钮来打开和关闭 LED,如下所示,

poYBAGNg2zmABrbOAAA5NSXpDgg416.png

要调整按钮的大小或更改按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击按钮,您可以更改该特定按钮的颜色,字符串和标签。我们自定义了两个按钮,如下图所示。

pYYBAGNg2zqAU_8oAABiy2Z3jvk060.png

 

pYYBAGNg2zuAccdrAAAQ_rCtlJE192.png

您可以根据自己的选择自定义按钮。现在,当您保存此代码时,将在 MATLAB 的编辑器窗口中生成一个代码。根据您希望使用 MATLAB GUI 由 Arduino 执行的任务编辑此代码。

将以下代码复制并粘贴到第 74 行以设置串行端口和波特率。

clear all;

global x;

x=serial('COM18','BAUD', 9600); % Make sure the baud rate and COM port is

% same as in Arduino IDE

fopen(x);

poYBAGNg2z2AWt5PAAAXyo2KQjk454.png

其中,fopen(x) 用于打开串行端口进行串行通信。

向下滚动时,您将看到为 GUI 中的两个按钮创建了两个函数。现在,根据要在单击时执行的任务在两个函数中编写代码。

在LED-ON按钮的功能中,在功能结束之前复制并粘贴以下代码以打开 LED。正如你在下面的代码中看到的,fprintf(x,1) 用于将串行数据从 MATLAB 发送到 Arduino 串行。在这里,我们将“1”发送到Arduino串行,如果您检查Arduino代码,您会发现Arduino将通过使其13千引脚为高电平,当它的串行端口上收到“1”时。

global x;

fprintf(x,1);

poYBAGNg20GAHAcCAAAXJuv5g64124.png

在LED-OFF按钮的功能中,在功能结束之前复制并粘贴以下代码以关闭 LED。正如你在下面的代码中看到的,fprintf(x,0) 用于将串行数据从 MATLAB 发送到 Arduino 串行。在这一部分中,我们将“0”发送到Arduino串行,如果您检查Arduino代码,您会发现Arduino将通过使其13千引脚低电平,当它的串行端口上收到“0”时。

global x;

fprintf(x,0);

poYBAGNg20WAYT6WAAAXgTwV2kM074.png

完成 MATLAB GUI 编码并根据电路图设置硬件后,只需单击运行按钮即可在 .m 文件中运行编辑后的代码。

poYBAGNg2y6ACx9QAABCUcDDW7s846.png

MATLAB 可能需要几秒钟才能响应,在 MATLAB 显示 BUSY 指示之前不要单击任何 GUI 按钮,您可以在屏幕的左下角看到,如下所示,

pYYBAGNg2y-ALn58AAAH7ib18G0117.png

一切准备就绪后,单击 LED 打开和 LED 关闭按钮以打开和关闭 LED。当您按下 LED 亮起按钮时,13千Arduino 的引脚变为高电平,连接到此引脚的 LED 开始发光,当您按下 LED 关闭按钮时,13千Arduino的引脚变为低电平,使LED关闭。

Arduino Code for Serial Communication between MATLAB and Arduino


int value;


void setup()

{

Serial.begin(9600);

pinMode(13, OUTPUT);

}


void loop()

{

if(Serial.available()>0)

{

value=Serial.read();


if (value == 1) 



digitalWrite(13, HIGH);

}

if(value == 0) 



digitalWrite(13, LOW);

}

}

}





MATLAB Code for Serial Communication using MATLAB GUI


function varargout = final(varargin)


gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @final_OpeningFcn, ...

'gui_OutputFcn', @final_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end


if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end


handles.output = hObject;


guidata(hObject, handles);


function varargout = final_OutputFcn(hObject, eventdata, handles) 


varargout{1} = handles.output;

clear all;

global x;

x=serial('COM18','BAUD', 9600); % Make sure the baud rate and COM port is 

% same as in Arduino IDE

fopen(x);



function turnonled_Callback(hObject, eventdata, handles)


global x;

fprintf(x,1);



function turnoffled_Callback(hObject, eventdata, handles)


global x;

fprintf(x,0);
 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信