软件集成:Simulink与Arduino联合开发
本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个Arduino路径中去编译软件。最后将软件下载到Arduino Uno中,通过串口输出Simulink计算的结果。
阅读本文需要有一定的Arduino IDE开发调试经验和Simulink代码生成经验。关于Simulink代码生成可以参考博主的专栏《Simulink代码生成》。部分内容参照上一篇博客《集成与验证:Simulink与STM32联合开发》,本文就不再赘述。
文章目录
- 1 问题引入
- 2 集成方案
- 3 建模与编程过程
- 3.1 Simulink模型搭建
- 3.2 代码生成配置
- 3.3 Arduino项目搭建
- 3.4 串口打印、验证结果
- 4 总结
1 问题引入
在上一篇博客《集成与验证:Simulink与STM32联合开发》中,成功地将Simulink生成出地代码加入到STM32工程中编译,并通过下载到STM32F407中验证了方案的正确性。
对于创客朋友们来说,还有一个常用的硬件就是知名的Arduino。Arduino的封装程度很高,并且有自己的一个专门的IDE供开发。但是Arduino的并成语言是C++,和STM32有些区别。所以本文会研究通过同样的方案、同样的Simulink模型生成C++的代码,并放在Arduino中运行。
2 集成方案
本文的集成方案与《集成与验证:Simulink与STM32联合开发》相同,只不过主函数变成了main.ino文件。所以集成方案参照《集成与验证:Simulink与STM32联合开发》的第2章即可。
3 建模与编程过程
3.1 Simulink模型搭建
模型的搭建、Storage Class的建配置与《集成与验证:Simulink与STM32联合开发》的第3.1章相同。
3.2 代码生成配置
搭建好模型,配置好信号线的Storage Class后,进行代码生成配置。这里和STM32的配置略有不同。
1)打开Simulink配置,配置离散求解器、代码生成的目标文件,以及目标硬件。
这里的目标文件还是ert.tlc,但是语言要选为C++。目标硬件要配置为AVR。
2)点击左侧的Interface,把Code Interface packaging选为Nonreusable function。默认的选项是C++ Class,会生成C++类的接口,不支持一部分Storage Class。Nonreusable function生成的代码就会和C代码差不多了。
3)Ctrl + B生成代码后会发现生成了一个demo.cpp的C++源文件,而不是demo.c的C源文件。
内容基本上和C源文件一样,这里就不再解析代码内容。
3.3 Arduino项目搭建
1)新建一个空白的Arduino项目main.ino,将如下代码拷贝进去。
#include "demo.h"float Demo_Input; //在main.ino文件中定义全局变量Demo_Inputvoid setup() {// put your setup code here, to run once:Demo_Input = 0; //初始化Demo_Input为0demo_initialize(); //demo模型的初始化函数Serial.begin(9600); //串口初始化
}void loop() {// put your main code here, to run repeatedly:Demo_Input = Demo_Input + 1; //Demo_Input每个循环加1demo_step(); //执行模型的step函数,给Demo_Output赋值为Demo_Input的两倍Serial.print(Demo_Input); //打印输入变量和输出变量Serial.print(";");Serial.print(Demo_Output);Serial.println(";");delay(1000); //延时1s
}
整体代码的思路和博客《集成与验证:Simulink与STM32联合开发》的第3.4章相似。
2)将Simulink生成的源文件和头文件拷贝到main.ino目录下。
在Arduino开发中,只要把源文件和头文件放在项目目录里,就可以调用到了,不需要像STM32的环境中那样配置一番。
3.4 串口打印、验证结果
通过Arduino IDE编译、上传,再通过串口打印可以得出Demo_Input和Demo_Output全局变量的数值。
从图中可以看出,串口打印的输入每隔1秒钟会加1,输出一直是输入的2倍。从而验证了模型的2倍增益效果已经体现在Arduino项目中了。
4 总结
通过Simulink生成适用Arduino的代码其实也比较简单,主要是注意配置C++以及目标硬件即可。
>>返回个人博客总目录
软件集成:Simulink与Arduino联合开发相关推荐
- 软件集成:Simulink与STM32联合开发
本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件.最后将软件下载到STM32F407中,通过串口输出Simulink计算的结果. 阅读本文需要有一 ...
- STM32CubeMX、keil、simulink联合开发MCU教程
一.整体思路 利用Matlab的simulink搭建模型生成C代码,通过stm32cubemx生成工程,最后在KEIL或者IAR等工具里面编译生成代码下载至MCU中执行. 本文以流水灯建立模型和简单使 ...
- ADRC控制器 Ardupilot SIMULINK 飞控联合开发
ADRC控制器 Ardupilot & SIMULINK 飞控联合开发 Adrc控制器 Simulink to C++ Ardupilot PID库替换 自动代码生成源文件 PID库 参数添加 ...
- Linux软件集成开发环境
package: download from: 软件集成开发环境(代码编辑.浏览.编译.调试) Emacs http://www.gnu.org/software/emacs/ Source-Navi ...
- Arduino应用开发——SD卡
Arduino应用开发--SD卡 目录 Arduino应用开发--SD卡 前言 1 硬件介绍 1.1 模块简介 1.2 硬件连接 2 软件编程和测试 2.1 Arduino IDE环境搭建 2.2 S ...
- 安全软件秘诀——根据ISO / DIS 26262开发ECU基础软件
原文链接:Recipe for Safe Software 安全软件秘诀 根据ISO / DIS 26262开发ECU基础软件 随着新的ISO 26262标准的引入,安全相关功能的要求变得比以前更加具 ...
- 基于Arduino Uno开发板制作音乐播放器
基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器. 利用Arduino Uno读取sd卡模块中内存卡的音乐,传输信号到扬声器进行播放. 一.项目软硬件简 ...
- Arduino各开发板
参考来源:https://www.arduino.cn/thread-42417-1-1.html 查了好久,发现除了奈何等等几位大神总结过arduino各板子之间的性能.差异,没有很新的分析文章,在 ...
- Arduino UNO开发板开箱体验
Arduino UNO开发板开箱体验 1.Arduino简述 1.1什么是Arduino Arduino是一个开源的电子设计平台,包括软件和硬件.其中硬件部分就是一块开发板了,软件部分就是对这块板子 ...
最新文章
- 下拉列表JComboBox,列表框JList
- quasar_Quasar和Akka –比较
- python搭建自动化测试平台_如何用python语言搭建自动化测试环境
- AWS自动化合规slide
- Linux一些经典书籍
- asp.netcore3.0 使用 DbProviderFactories 连接数据库
- .NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
- 2019专业赛事活动承办平台有哪些?—创成汇
- oracle数据库启动多个监听,一台Oracle数据库服务器上两个监听同时使用
- 学编程必备:3 大编程字体!让你在编程的时候原地起飞!
- 【MySQL】聚合函数、group by、having、order by等语句的应用
- 用JS判断浏览器是否是IE9以下,处理可能遇到的兼容性问题,或者给出浏览器版本过低的升级提醒。
- wp/wordpress 自定义模板调用函数
- 根据某一列拆分Excel为多个表格
- Java虚拟机(三)--------GC算法和收集器
- 微信昵称中表情保存到数据库问题
- PCA(主成分分析)及源码
- scrapy-爬取豆瓣电影排行250
- 高中生必读:如何利用黄金暑假期冲刺高中数学
- 深度学习在人脸识别中的应用 ——优图祖母模型的“进化”