Matlab与Arduino连接(一):MATLAB与Arduino的串口通信

1、arduino自身的串口测试典例

用arduino自身带的串口串口来进行测试,以及LED灯(pin13)来做测试,代码如下所示:

int led = 13;
char string;
float angle_1;
float angle_2;
void setup() {
  Serial.begin(9600);
  Serial.println("Led blink-blink");
  // 打印名字
pinMode(led,OUTPUT);
}

void loop() {
  if(Serial.available()>0){
    string = Serial.read();
    delay(2);}
  // 判断串口输入信息控制LED的亮灭
  if(string == '1'){
    digitalWrite(led,HIGH);
    angle_2 = (float(string) - 48);
    Serial.println(angle_2);
} 
else if(string == '2'){
  digitalWrite(led,LOW);
  angle_1 = (float(string)- 48);
  Serial.println(angle_1);
  }
}

串口小练习:

```cpp
int Serial_val = 0;
char string;
int i = 1;
int num_1;
int num_2;
void setup() 
{
   Serial.begin(9600);
   Serial.println("i am coming");
}
void loop()
{
  while(i <= 10)
  { 
    if(Serial.available()>0)//有数据输入时,接收
  {
    string = Serial.read();
    Serial.println(float(string));
    Serial.println()
    delay(2);
  }
    //num_1 = int(string) - 48;
    Serial.println(i);
    i = i + 1;
    delay(2000);
    }
}

串口监视窗口:

途中:打印52是,给arduino发送了‘4’,其打印的是ASCII码。所以,注意他们之间的转换。

2、MATLAB与arduino的串口通信

实现arduino与matlab两端间相互的数据传输、发送。

arduino端的代码(比较杂和乱,不同测试用的代码)

int Serial_val = 0;
char string;
int i = 1;
int num_1;
void setup() 
{
   Serial.begin(9600);
   pinMode(13, OUTPUT);
   Serial.println("i am coming");
}
void loop()
{
  while(i <= 100)
  { if(Serial.available()>0){
    string = Serial.read();//监控串口是否发过来数据
    delay(2);
    num_1 = float(string) - 48;//转为浮点型和Ascii码转换
    if(num_1 == 1){
      digitalWrite(13,HIGH);//利用灯来判断
      }
      else if(num_1 == 2){
      digitalWrite(13,LOW);
        }
  }
    //digitalWrite(13,LOW);
   // Serial.println(num_1);测试用的可不管
    delay(100);
    Serial.println(i);
    i = i + 1;
    delay(1000);
    }
}

matlab端,这里将代码写成函数形式,用的时候调用即可。

%%注:代码比较杂乱,是下图改进后传输数据绘图的用的

function Serial_communication1(numero_muestras)
%建立函数
close all;
clear all;
clc;%matlab的‘初始化’
%y = zeros(1,1000);
delete(instrfind({'Port'},{'COM6'}));%设置创建串口COM6;
puerto_serial = serial('COM6');
puerto_serial.BaudRate = 9600;
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
fopen(puerto_serial);%打开串口
contador_muestras = 1;
% figure('Name','Serial communication:Matlab + Arduino.WCYang');
% title('arduino 和 Matlab通信');
% xlabel('模拟数值');
% ylabel('量');
% grid on;
% hold on;
%disp(puerto_serial);
numero_muestras = 10;
valor_f = 0;
while contador_muestras <= numero_muestras
    %ylim([0 5.1]);
    %xlim
    %Y = puerto_serial;
    
    %plot(contador_muestras,valor_f,'X-r');
    %drawnow;
    %disp(puerto_serial);
    valor_f = fscanf(puerto_serial,'%d');
    disp(valor_f);
    contador_muestras = contador_muestras + 1;
   
    fprintf(puerto_serial,'1');%给arduino发送信息
    pause(0.5);
    fprintf(puerto_serial,'2');
    pause(0.5);
end
fclose(puerto_serial);
delete(puerto_serial);%关闭、断开串口连接
clear all;
end

注意:串口通信一般有两种方式: 1、字符 2、字节 。例如,发送‘’15‘其首先发’1‘过去后再发’5‘过去。且需要利用ASCII表转换。
对照表可点此链接:点我吧,叮咚!

  • 4
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MatlabArduino串口通信可以通过以下步骤实现: 1. 在Matlab中打开串口:使用serial函数打开串口,指定串口号、波特率等参数。 2. 向Arduino发送数据:使用fwrite函数向串口发送数据,可以发送数字、字符等类型的数据。 3. 从Arduino接收数据:使用fread函数从串口接收数据,可以接收数字、字符等类型的数据。 4. 在Arduino中编写程序:使用Serial库中的函数实现串口通信,可以接收Matlab发送的数据并进行处理,也可以向Matlab发送数据。 需要注意的是,在进行串口通信时,需要保证MatlabArduino的串口参数一致,例如波特率、数据位、停止位等。同时,需要在Arduino程序中添加延时函数,以便Matlab能够正确接收数据。 ### 回答2: matlab是一款功能强大的科学计算软件,而Arduino是一款便捷易用的开源硬件平台。通过串口通信,可以将两者进行有效的联接。串口通信是一种简单而广泛的通信方式,能够实现硬件之间数据的传输和收发。 在matlab中,串口通信可以通过调用相关的函数和构建相应的数据格式来实现。matlab提供了serial函数来创建串口对象,其中包含了串口的配置参数和打开方式。通过串口对象,可以实现数据的发送和接收。在进行串口通信时,需要确保Arduino的串口设置和matlab的设置相同,比如波特率、数据位、校验位、停止位等。 Arduino本身就有很好的串口库,可以帮助我们进行串口的初始化和读写操作。为了实现串口通信,需要在Arduino程序中引用Serial库,使用Serial.begin()函数初始化串口,设置波特率、数据位、校验位、停止位等。通过Serial.print()或Serial.write()函数,可以将数据发送到matlab程序中,并通过Serial.read()函数将数据反向传回Arduino控制器。 在实际应用中,matlabArduino串口通信可以广泛应用于各种领域。例如,在机器人方面,通过串口通信可以实现机器人的实时控制和数据传输。在自动化控制领域,可以将Arduino的控制信号与matlab的算法程序相结合,实现各种自动化控制。在物联网领域,通过串口通信可以实现对各种传感器和设备的数据监测和控制。 总之,matlabArduino串口通信是一种十分有用的方式,可以有效实现硬件与软件之间的联接和数据传输。通过它,可以实现各种高效、可靠、智能化的控制和传输方式,为各种应用场景提供了不同的解决方案。 ### 回答3: MATLAB是一个强大的数学计算软件,能够实现多种功能,其中包括与外部设备的通信,例如与Arduino控制器的串口通信Arduino是一个开源的硬件平台,其使用简单且功能强大,因此非常适合初学者使用进行开发。 MATLABArduino串口通信的方法如下: 1. 首先,Arduino板必须与电脑相连,包括使用USB电缆连接Arduino板和电脑,或通过蓝牙或WiFi连接Arduino板和电脑。 2. 在MATLAB中,必须使用串口对象建立通信连接。首先,使用serialport函数创建一个串口对象,可以指定串口号、波特率等参数。 3. 一旦创建了串口对象,就可以使用read和write函数来发送和接收信息。使用fprintf函数来发送数据,使用fread函数来接收数据。这些函数可以实现数据收发的不同格式,例如十六进制、ASCII码等。 关于如何在Arduino中编写代码以与MATLAB通信,由于涉及到Arduino编程的内容,具体的细节略。简单来说,Arduino需要设置一个串口对象,以与MATLAB建立通信连接,然后使用Serial.println函数或其他类似的函数向MATLAB发送数据。在Arduino的代码中,还需要设置接收数据的方法,例如读取MATLAB发送的数值或字符,并将其作为变量存储在Arduino内部。 总之,MATLABArduino串口通信可以方便地实现数据收发的相互作用,因此将两者结合在一起可以扩展其功能和用途。与其他传感器、执行器等外部设备的通信也可以采用类似的方式进行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值