Simulink与Arduino串口通信

本文想实现的目的为:Simulink与Arduino串口通信,进而获取与Arduino连接的压力传感器FSR402的数据(Simulink与Arduino串口通信收发数据可参考https://github.com/leomariga/Simulink-Arduino-Serial)。

Simulink与Arduino交互的方式有两种(http://www.51hei.com/arduino/3989.html):
(1)Simulink Arduino Support package
(2)Simulink串口通信

由于已经给Arduino编好了读取FSR402压力值的程序(链接:https://pan.baidu.com/share/init?surl=oaCRDtLm8Vd_4SfYa3ctaw 提取码:zmj2),又希望在Simulink中调用串口,读取数据。此时 Simulink Arduino Support package显然不合适了。这里我们要用到Simulink里的串口模块Serial Receive,从对Serial Receive模块中可以看出其接收的为二进制数据。
在这里插入图片描述

在具体实现之前,需要对串口通信的方式进行说明。串口通信一般有两种方式: 1、字符(对应文本方式) 2、字节(对应二进制方式)

字符字节
fscanf fprint (Matlab)fread fwrite (Matlab)
Serial. print (Arduino)Serial.write (Arduino)

通俗来讲,字符方式针对的是PC端显示,字节方式更多用于与串口设备通信。

所以在Arduino程序中我们可以发现,采用的是print函数对数据进行输出,进而可以在串口监视器查看输出。但是Serial Receive接收的为二进制数据,所以需要利用write函数进行一个字节一个字节的输出,进而将压力值写到Arduino所对应的串口,从而Simulink通过串口接收模块进行读取。

Arduino发送
Arduino中利用union来发送float类型数据。代码段如下

定义union SeFrame

union SeFrame
{
  long Long;
  byte Byte[4];
};
SeFrame Sefram; 

发送数据代码段:

void Send_long(long LONG)
{
    Sefram.Long= LONG;
    Serial.write(Sefram.Byte[0]);
    Serial.write(Sefram.Byte[1]);
    Serial.write(Sefram.Byte[2]);
    Serial.write(Sefram.Byte[3]);
}

simulink接收设置

Serial Receive模块中:
在这里插入图片描述

data type设置为int32,每个数据占用4个字节

data size 设置为1,因为我们要发送的数据只有一个。

最终效果如下:
在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值