Arduino代码生成(闪烁的LED)
如今,Arduino平台已成为机器人技术教学和简单流程自动化领域中最广泛使用的平台。 它被广泛应用于众多应用领域的原型设计。
在本示例中,我们将以电路设计中最简单的任务之一为例,演示如何在 AnyMath 中通过图形化模型生成 Arduino 的程序代码。 我们将创建一个模型,使其以给定的频率闪烁 Arduino 平台的“板载”LED。
引言
本示例中关于将模型移植到硬件平台的解决方案,可分为以下几个步骤:
- 创建或修改 AnyMath 模型
- 描述 模型与 Arduino 之间的接口
- 下载项目文件夹并通过 Arduino IDE 将其上传至目标平台
在面向模型的设计过程中,我们力求将所有精力集中在第一阶段——对将移植到 Arduino 上的算法进行建模。 接口配置阶段几乎不需要人工干预,而代码生成及其上传至目标设备,虽然尚未实现自动化,但也无需任何复杂的操作。
平台准备
对于本示例,我们仅需一块Arduino兼容开发板(如Uno、Leonardo、Iskra等)以及一条适配的USB数据线。
此外,还需要在您的计算机上安装 Arduino IDE,并查找并安装 附加驱动程序(如有需要),并通过 USB 端口连接现有的开发板。
.png)
查找并安装用于连接外部设备的驱动程序通常需要花费一些功夫。上述驱动程序应可让您使用 Arduino Uno、Arduino Leonardo 以及许多其他类似的开发板,例如 Iskra Neo。 不过,若遇到任何困难,建议查阅参考文章或向 AnyMath 社区寻求帮助。
模型说明
我们将基于blink.engee 模型生成代码。
在每个步骤中,该模型都会执行其中描述的计算,并返回两个值:
1.out_LED_BUILTIN – LED的状态(初始值为1,每个周期都会变为“相反”状态),
2.param_WAIT_MS – 始终返回的值500 (两次调用本模型代码之间的时间间隔,单位为毫秒)。
.png)
生成代码的条件之一是在模型中使用 固定步长求解器.
还需注意,并非所有模块在技术上都能够(甚至有必要)生成代码。 虽然支持的模块列表非常庞大,但查阅 AnyMath 代码生成器文档 总是很有帮助的。
代码生成
点击按钮即可获取该模型的代码: 位于 AnyMath 工作区的右上角(此时需要将blink_code 文件夹移动到sketch_blink_custom 文件夹内)。
在本演示中,我们建议使用以下命令来完成此操作:
engee.generate_code( "$(@__DIR__)/blink.engee",
"$(@__DIR__)/sketch_blink_custom/blink_code" )
最终,在目录sketch_blink_custom 中会出现一个名为blink_code 的文件夹,其中包含.c 和.h 这两个包含我们系统代码的文件。
项目文件
我们的项目中只有一个模型。在生成的文件中,我们只需要包含该模型代码的文件:源代码blink.c 和头文件blink.h 。
请注意项目文件和目录的结构:
.png)
- 文件
sketch_blink_custom.ino包含 模型-Arduino 接口描述,
*sketch_blink_custom级目录的名称必须与文件*.ino保持一致(Arduino IDE 的要求),
*blink_code目录包含生成的代码文件,我们将把这些文件包含到*.ino文件中。
模型-Arduino 接口
本模型端口与 Arduino 各函数入口点之间的接口在文件sketch_blink_custom.ino 中有详细说明。建议您直接在 AnyMath 中打开该文件并查阅其内容。
该代码实现了一个无限循环,其中运行着生成的模型代码。输出值被放入blink_Y 结构体中,随后我们将每个值传递给Arduino标准库中的相应函数。
将模型移植到Arduino
接下来只需将演示目录打包为压缩包,并通过文件管理器AnyMath将其下载到本地计算机上。打包和下载可通过右键菜单的一步操作完成。
.png)
解压生成的压缩包后,您会发现其中包含文件sketch_blink_custom.ino ,该文件可在Arduino IDE中打开。
.png)
您已获得一个在Arduino IDE中打开的现成项目,只需点击“Upload”按钮将其上传至目标设备即可。
.png)
以下视频展示了运行该示例的典型结果:
结论
处理低级代码通常需要一定的技术技能和额外的操作。
除了开发模型外,您至少还需要:
- 创建 AnyMath 模型与 Arduino 功能之间的接口,
- 下载项目并在本地目标设备上运行。
在实现特定应用任务时,可能会遇到更复杂的问题——例如,模型运行速度与 Arduino 处理器时钟频率之间的匹配问题。
然而,您在 AnyMath 中构建的、符合自身需求的优化工作流程,通过自动化许多常规操作,将在复杂项目中为您节省大量精力:
- 根据数学模型同步项目代码,
- 创建直观的文档——在 AnyMath 中,您可以通过命令自动将电路图照片和输出图表添加到脚本中,并生成 HTML 或 PDF 格式的报告,
- 并显著简化半实物仿真测试。