Engee 文档
Notebook

为Arduino生成代码(闪烁的LED)

Arduino平台是当今最广泛使用的教育机器人和简单流程自动化平台。 它用于各种应用领域的原型设计。

在这个例子中,我们将展示如何使用电路工程中最简单的任务之一的例子,从Engee中的图形模型为Arduino生成软件代码。 让我们创建一个模型,它将以一定的预设频率闪烁Arduino平台的"板载"LED。

导言

解决将模型转移到硬件平台的问题,在这个例子中描述,可以分为几个步骤。:

  1. 创建或更改Engee模型
  2. 接口模型的描述**-Arduino**
  3. 下载项目文件夹并通过Arduino IDE上传到平台

在面向模型的设计过程中,我们试图将所有努力集中在第一阶段-对将要转移到Arduino的算法进行建模。 接口配置阶段需要非常少的干预,代码生成和上传到目标平台虽然不是自动化的,但不涉及任何复杂的操作。

平台准备

对于这个例子,我们只需要一个Arduino兼容的平台(Uno,Leonardo,Iskra等)和合适的USB电缆。

您还需要在计算机上安装[Arduino IDE]环境(https://www.arduino.cc/en/software ),查找和供应[附加драйверы](http://wiki.amperka.ru/articles:driver-ch340#установка_драйвера )(如有必要)并通过USB端口连接现有板。

image_2.png

查找和安装驱动程序以连接到外部硬件通常需要一些努力。 上面的驱动程序应该允许您使用Arduino Uno,Arduino Leonardo和许多其他类似的电路板,如Iskra Neo。 但是,如果遇到任何困难,我们建议您咨询参考文章或Engee社区寻求帮助。_

模型描述

我们将从模型中生成代码。 blink.engee.

在每个步骤中,它执行其中描述的计算并返回两个值:

  1. out_LED_BUILTIN -LED的状态(最初等于1,每个周期变为"相反"),
  2. param_WAIT_MS -永久返回值 500 (两次访问模型代码之间的毫秒数)。
image_2.png

代码生成的条件之一是在模型中使用恒定步长求解器**

还应该记住,从所有块中获取代码在技术上是不可能的(甚至是可取的)。 有效块的列表仍然很长,但检查[Engee代码生成器上的文档]总是有用的(https://engee.com/helpcenter/stable/codegen/code-generation-options.html )。_

代码生成

您可以通过单击<svg width="24"height="24"viewBox="0 0 24 24"fill="none"xmlns="来获取此模型的代码http://www.w3.org/2000/svg "><path d="M11.379 0.153333c11.5511 0.0529147 11.7468 0 11.946 0C12.1452 0 12.3409 0.0529147 12.513 0.153333L21.834 5.59083c22.0041 5.68976 22.1453 5.83158 22.2435 6.00214C22.3417 6.1727 22.3934 6.36603 22.3935 6.56283V17.4378C22.3934 17.6346 22.3417 17.828 22.2435 17.9985c22.1453 18.1691 22.0041 18.3109 21.834 18.4098L12.513 23.8473C12.3409 23.9478 12.1452 24.0007 11.946 24.0007C11.7468 24.0007 11.5511 23.9478 11.379 23.8473l2.058 18.4098C1.88815 18.3107 1.74725 18.1688 1.64934 17.9983C1.55143 17.8277 1.49994 17.6345 1.5 17. 4378V6.56283C1.49994 6.36618 1.55143 6.17295 1.64934 6.0024C1.74725 5.83185 1.88815 5.68995 2.058 5.59083L11.379 0.153333ZM12 22L20.5 17V7L12 2L3.5 7V17L12 22Z"FILL="#212121"><PATH FILL-RULE="EVENODD"CLIP-RULE="EVENODD"D="M14.8797 9.17157C13.397 7.60948 10.9931 7.60948 9.51036 9.17157C8。02766 10.7337 8.02766 13.2663 9.51036 14.8284C10.9931 16.3905 13.397 16.3905 14.8797 14.8284C15.2503 14.4379 15.8513 14.4379 16.222 14.8284C16.5927 15.219 16.5927 15.8521 16.222 16.2426C13.998 18.5858 10.3921 18.5858 8.16803 16.2426C5.94399 13.8995 5.94399 10.1005 8.16803 7.75736C10.3921 5.41421 13.998 5.41421 16.222 7.75736C16.5927 8.14788 16.5927 8.78105 16.222 9.17157C15.8513 9.5621 15.2503 9.5621 14.8797 9.17157Z"FILL="#212121"><RECT WIDTH="24"HEIGHT="24"FILL="WHITE">在工作区的右上角ENGEE(然后您将需要移动文件夹 blink_code 文件夹内 sketch_blink_custom).

在本演示中,我们建议使用以下命令执行此操作:

In [ ]:
engee.generate_code( "$(@__DIR__)/blink.engee",
                     "$(@__DIR__)/sketch_blink_custom/blink_code" )
Out[0]:
"Created directory - /user/start/examples/codegen/arduino_blink/sketch_blink_custom/blink_code"

其结果是,在目录 sketch_blink_custom 文件夹将打开 blink_code 我们发现 .c.h 文件与我们的系统的代码。

项目文件

我们的项目中只有一个模型。 在生成的文件中,我们只需要带有此模型代码的文件:源代码 blink.c 和头文件 blink.h.

值得关注的是项目文件和目录的结构:

image_2.png

*档案 sketch_blink_custom.ino 包含接口模型的描述-Arduino,
*级别目录 sketch_blink_custom 它应该与文件命名相同。 *.ino (Arduino IDE要求),
*目录 blink_code 它包含带有生成代码的文件,我们将包含在文件中。 *.ino.

接口模型-Arduino

文件中描述了我们模型的端口和各种Arduino功能的入口点之间的接口 sketch_blink_custom.ino. 我们建议您直接在Engee中打开它并探索其内容。

此代码实现了一个无限循环,其中运行生成的模型代码。 输出值放置在结构中 blink_Y 之后,我们将每个值从Arduino标准库传递给所需的函数。

将模型转移到Arduino

剩下的就是将演示目录打包到存档中,并将其从Engee文件管理器下载到本地计算机。 归档和下载可以通过上下文菜单的单个操作完成。

image_2.png

解压缩生成的存档后,您将在其中找到一个文件。 sketch_blink_custom.ino,可以在Arduino IDE中打开。

image_2.png

您已经收到了在Arduino IDE中打开的现成项目,该项目仍然需要使用"上传"按钮发送到目标平台。

image.png

运行示例的典型结果如下面的视频所示:

20240126_122454~2-30fps.GIF

结论

使用低级代码通常需要一些技术技能和额外的操作。

除了开发模型之外,您至少需要:

*在Engee模型和Arduino函数之间创建接口,
*下载项目并在本地目标平台上运行。

在实现单个应用程序任务时,可能会出现更复杂的问题,例如,将模型的速度与Arduino处理器的时钟频率相关联。

但是,您优化的工作流程,内置Engee并适合您的需求,通过自动化许多常规操作,将在复杂的项目中节省大量精力。:

*按照数学模型同步项目代码,
*创建可视化文档-在Engee中,您可以使用命令自动将图表的照片和输出图表添加到脚本中,并以HTML或PDF格式生成报告,
*并显着简化半例行测试。

示例中使用的块