我是靠谱客的博主 怕孤单毛衣,最近开发中收集的这篇文章主要介绍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表转换。
对照表可点此链接:点我吧,叮咚!

最后

以上就是怕孤单毛衣为你收集整理的Matlab与Arduino连接(一):MATLAB与Arduino的串口通信的全部内容,希望文章能够帮你解决Matlab与Arduino连接(一):MATLAB与Arduino的串口通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部