为Arduino生成代码(读取模拟输入信号)
在这个例子中,我们将为Arduino生成一个代码,它将测量一个模拟输入值,并使用这个输入参数来控制板载LED的亮度。
导言
对于这个演示,除了Arduino板之外,我们还需要一个可变电阻(电位器)。 我们将使用制造商Amperka的Troyka模块。 该电位器具有10kOhm的电阻,允许您将信号输出处的电压从约0伏更改为Arduino电源电压(通常为5伏)。
通常,任何模拟电位器都有三个输出引脚,我们将连接到Arduino板,如下所示:
*电源引脚V(电压)和G(接地)–到Arduino板的引脚5V和GND
*引脚S(信号)-到引脚A0(零模拟输入)
Engee模型的描述
模型的一般视图如下所示 analog.engee,我们将从中生成代码。 它由一个子系统组成。
在一个计算周期中,模型通过端口接受输入数据 in_ANALOG_PORT 并计算两个输出变量: out_LED_BUILTIN 和 param_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.
engee.generate_code( "$(@__DIR__)/analog.engee",
"$(@__DIR__)/sketch_analog_custom/analog_code" )
在输出端接收的文件 *.c 和 *.h 已经放置在项目的所需子文件夹中。 档案 analog.c 我们使用命令连接到代码的依赖于平台的部分 include.
数据使用结构传输到生成的代码中或从生成的代码中传输 analog_U 和 analog_Y. 这些结构的字段与Engee图中的端口具有相同的名称。
要获得更简洁的代码,请尝试在模型设置(代码生成选项卡)中禁用自动注释。
将模型转移到Arduino
要将项目转移到Arduino,请按照以下步骤操作:
- 下载目录
sketch_analog_custom从文件浏览器; - 解压缩本地计算机上的存档;
- 打开文件
sketch_analog_custom.ino并在Arduino IDE中,单击按钮Upload.
因此,我们能够使用电位器来调整进入LED的PWM信号的调光,从而调整其亮度。 舵机,泵和各种放大器可以以相同的方式进行控制(小心电流消耗限制,最好通过额外的电源连接三个或更多舵机,绕过Arduino电压稳定)。
结论
我们已经看到,在Engee中,可以为嵌入式系统创建成熟的算法-接收数据,处理数据,并使用输出值来控制连接到硬件平台的电子设备。
代码生成是实现面向模型的开发方法的关键工具,其中嵌入式系统的部分代码可以作为模型开发,在模型环境中进行测试,并通过半例程测试进行。