Engee 文档
Notebook

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

在本示例中,我们将为 Arduino 生成代码,以读取模拟输入测量值,并使用该输入值控制 "板载 "LED 的亮度。

简介

在本演示中,除了 Arduino 电路板,我们还需要一个可变电阻器(电位器)。我们将使用 Amperka 制造商生产的 Troyka 模块。该电位器的阻值为 10 千欧,可以将信号输出端的电压从 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 中,实现了以下接口:

  • 读取 Arduino 平台A0 输入端的电压电平,并将此 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 已经放在项目所需的子文件夹中。我们使用命令include 将文件analog.c 连接到代码中与平台相关的部分。

与生成代码之间的数据传输通过analog_Uanalog_Y 结构进行。这些结构的字段与Engee图中的端口名称相同。

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

将模型传输到 Arduino

要将项目传输到 Arduino,您需要遵循以下步骤:

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

这样,我们就可以使用电位器调节 LED PWM 信号的频率,从而调节其亮度。用同样的方法还可以控制舵机、泵和各种放大器(注意电流限制,最好通过额外电源连接三个或更多舵机,绕过 Arduino 稳压)。

结论

我们已经看到,在Engee中,可以为嵌入式系统创建完整的算法--接收数据、处理数据,并在输出值的帮助下控制与硬件平台相连的电子设备。

代码生成是实施模型驱动开发方法的重要工具,在这种方法中,一段嵌入式系统代码可以作为一个模型进行开发,在模型环境中进行测试,并通过半自然测试运行。