Engee 文档
Notebook

Arduino支持包:数字输入和输出

在这个例子中,我们再次使用Arduino MEGA的数字输出,使用四位七段指示器5461as-1上的动态指示。 此外,我们将使用数字输入来切换显示的数据,我们将使用有限状态机实现输入信号的边缘选择。

导言

在前面的例子中,我们已经考虑过:编程一个[七段指标](https://engee.com/community/ru/catalogs/projects/arduino-semisegmentnyi-indikator )和动态显示。 在这个例子中,我们将结合这两个模型-5461as指示器的数字将动态切换,为每个数字显示相应的点火段序列。

由于该指标为四位数,并且该项目正在2026新年前夕开发,我们将通过触摸按钮实现年份变化的指示。

在示例中,我们还使用带有数字输入/输出的Arduino MEGA:30-36用于段,40-44用于数字,2用于按钮。

此外,该电路还需要:一个面包板,一个按钮,4个用于放电的330欧姆电阻,1个10kOhm电阻和一个用于防抖动电路的68nF电容。

硬件部分

连接图如下所示。

scheme.png

根据下表进行连接很方便:

Arduino引脚

联络电话5461AS-1

联络名称5461AS-1

图中电缆的颜色

2

-

-

粉红色

30

11

a

红色

31

7

b

橙色

32

4

c

黄色

33

2

d

绿色

34

1

e

蓝色

35

10

f

蓝色

36

5

g

紫罗兰

40

12

D1

棕色(330欧姆后)

41

9

D2

赭石(通过330欧姆)

42

8

D3

灰色(330欧姆后)

43

6

D4

白色(通过330欧姆)

5V

-

-

红色

GND

-

-

黑色

示例模型

示例模型如下面的屏幕截图所示。:

model.png

动态显示(段切换)的控制方式与[LED矩阵](https://engee.com/community/ru/catalogs/projects/6b153737-49ec-451b-a9b7-a7728410833b ),除了只有4位数字从最低切换到最高。

on_digit 它还确定了点燃的放电的数量,所有的段都在放电夹杂物之间熄灭。 所以块中的序列是这样定义的:

In [ ]:
on_digit_data = [1, 0, 2, 0, 3, 0, 4, 0];

包括区段的序列的形成与用[七区段指示符]的示例类似地实施(https://engee.com/community/ru/catalogs/projects/arduino-semisegmentnyi-indikator )。 用于在块中启用序列段的控制数据 Repeating Sequence Stair,其中,根据接通的数字指示器,将一个或另一个数字传送到输出以供显示。 以下输入数据在模型中设置:

In [ ]:
year25_data = [2, 11, 0, 11, 2, 11, 5, 11];
year26_data = [2, 11, 0, 11, 2, 11, 6, 11];

在这里,向量包含一个数字 11 -对于开关 multiportswitch 它超出了输入数字的范围,这导致它切换到默认输入,将序列转移到段。 [0, 0, 0, 0, 0, 0, 0].

用于切换输入数据的信号源是来自[Arduino-digitalRead]支持包的Arduino外设单元(https://engee.com/helpcenter/stable/ru/hardware-arduino/arduino-digitalread.html )。 块中设置数字输入号。 - 2. 使用有限状态机 edge_detector (座 Chart)输入信号的前沿被选择。 也就是说,当您单击按钮时,指示器的输入数据源将从块切换 year25 每块 year26.

准备工作

使用这段代码,我们自动启动Engee服务器程序。综合服务:

In [ ]:
import .engee.package as epkg

const PKGNAME = "Engee-Device-Manager"

function epkg_start(pkg::String)
    if !epkg.isinstalled(pkg)
        @info "Package not installed. Installing and Starting..."
        epkg.install(pkg)
        @info "Package is up to date. Starting..."
        # println("链接连接到服务器:\n"*epkg.开始(pkg))
    else
        updates = epkg.checkupdates(pkg)
        if isnothing(updates)
            @info "Package is up to date. Starting..."
            # println("链接连接到服务器:\n"*epkg.开始(pkg))
        else
            @info "Updates available. Reinstalling and Starting..."
            epkg.update(pkg)
            @info "Package is up to date. Starting..."
            # println("链接连接到服务器:\n"*epkg.开始(pkg))
        end
    end
end

epkg_start(PKGNAME)
Пакет поддержки 'Engee-Device-Manager' установлен.
У вас установлена актуальная версия пакета поддержки 'Engee-Device-Manager'.
[ Info: Package is up to date. Starting...

同样在幕后,[像往常一样](https://engee.com/community/ru/catalogs/projects/bc465b1d-9127-43a4-b73a-de7999ea6510 ),让我们启动Engee客户端程序。集成和连接我们的设备.

模型执行

让我们在独立模式下运行模型。

在记录中,我们可以看到所有嵌入的功能:

-按数字动态显示,
-将设定的数值输出成段,
-沿输入信号前沿切换显示数据

按预期实施。

结论

在这个例子中,我们结合了前面两个使用支持包的Arduino MEGA数字输出的例子,动态显示和七段数字的输出。 此外,我们添加了一个数字输入,并使用有限状态机实现了分配信号前沿的逻辑。