Engee 文档
Notebook

为Arduino生成代码(读取模拟输入信号)

在这个例子中,我们将为Arduino生成一个代码,它将测量一个模拟输入值,并使用这个输入参数来控制板载LED的亮度。

导言

对于这个演示,除了Arduino板之外,我们还需要一个可变电阻(电位器)。 我们将使用制造商Amperka的Troyka模块。 该电位器具有10kOhm的电阻,允许您将信号输出处的电压从约0伏更改为Arduino电源电压(通常为5伏)。

image_2.png

通常,任何模拟电位器都有三个输出引脚,我们将连接到Arduino板,如下所示:

*电源引脚V电压)和G接地)–到Arduino板的引脚5VGND
*引脚S信号)-到引脚A0(零模拟输入)

image.png

Engee模型的描述

模型的一般视图如下所示 analog.engee,我们将从中生成代码。 它由一个子系统组成。

image.png

在一个计算周期中,模型通过端口接受输入数据 in_ANALOG_PORT 并计算两个输出变量: out_LED_BUILTINparam_WAIT_MS.

输入变量的值范围从0到1023(数据来自10位ADC),因此首先我们将其缩放到0到1的范围。 类型转换自动发生。 组件 Multiport Switch 交替地向我们返回打开的持续时间和关闭LED的持续时间。 后有块。 Gain 其中延迟乘以30,和块 Saturation,从而防止负值传输到输出 param_WAIT_MS.

接口模型-Arduino

此代码的依赖于平台的部分,存储在文件中 sketch_analog_custom/sketch_analog_custom.ino,实现如下接口:

*读取输入电压电平 A0 Arduino平台将此10位值传输到模型的输入。,
*接受来自模型的LED状态(开或关),并打开或关闭连接到二极管的数字输出,
*接受模型的延迟时间(以毫秒为单位),该延迟时间必须从模型代码的执行完成到下一次执行。

我们可以通过其他方式生成PWM。:

*通过调用内置的Arduino函数 analogWrite,
*或通过将所需值与锯齿信号进行比较。

代码生成

下一个单元格允许您退出模型 analog.engee 制作将放置在文件夹中的代码 sketch_analog_custom/analog_code.

In [ ]:
engee.generate_code( "$(@__DIR__)/analog.engee",
                           "$(@__DIR__)/sketch_analog_custom/analog_code" )
Out[0]:
"Created directory - /user/start/examples/codegen/arduino_analog/sketch_analog_custom/analog_code"

在输出端接收的文件 *.c*.h 已经放置在项目的所需子文件夹中。 档案 analog.c 我们使用命令连接到代码的依赖于平台的部分 include.

数据使用结构传输到生成的代码中或从生成的代码中传输 analog_Uanalog_Y. 这些结构的字段与Engee图中的端口具有相同的名称。

要获得更简洁的代码,请尝试在模型设置(代码生成选项卡)中禁用自动注释。

将模型转移到Arduino

要将项目转移到Arduino,请按照以下步骤操作:

  1. 下载目录 sketch_analog_custom 从文件浏览器;
  2. 解压缩本地计算机上的存档;
  3. 打开文件 sketch_analog_custom.ino 并在Arduino IDE中,单击按钮 Upload.

因此,我们能够使用电位器来调整进入LED的PWM信号的调光,从而调整其亮度。 舵机,泵和各种放大器可以以相同的方式进行控制(小心电流消耗限制,最好通过额外的电源连接三个或更多舵机,绕过Arduino电压稳定)。

结论

我们已经看到,在Engee中,可以为嵌入式系统创建成熟的算法-接收数据,处理数据,并使用输出值来控制连接到硬件平台的电子设备。

代码生成是实现面向模型的开发方法的关键工具,其中嵌入式系统的部分代码可以作为模型开发,在模型环境中进行测试,并通过半例程测试进行。