AnyMath 文档
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

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

#[PIPE]
[PIPE][PIPE]

Arduino引脚

[PIPE]

联络电话5461AS-1

[PIPE]

联络名称5461AS-1

[PIPE]

图中电缆的颜色

[PIPE][PIPE]
[PIPE][PIPE]

2

[PIPE]

-

[PIPE]

-

[PIPE]

粉红色

[PIPE][PIPE]
[PIPE][PIPE]

30

[PIPE]

11

[PIPE]

a

[PIPE]

红色

[PIPE][PIPE]
[PIPE][PIPE]

31

[PIPE]

7

[PIPE]

b

[PIPE]

橙色

[PIPE][PIPE]
[PIPE][PIPE]

32

[PIPE]

4

[PIPE]

c

[PIPE]

黄色

[PIPE][PIPE]
[PIPE][PIPE]

33

[PIPE]

2

[PIPE]

d

[PIPE]

绿色

[PIPE][PIPE]
[PIPE][PIPE]

34

[PIPE]

1

[PIPE]

e

[PIPE]

蓝色

[PIPE][PIPE]
[PIPE][PIPE]

35

[PIPE]

10

[PIPE]

f

[PIPE]

蓝色

[PIPE][PIPE]
[PIPE][PIPE]

36

[PIPE]

5

[PIPE]

g

[PIPE]

紫罗兰

[PIPE][PIPE]
[PIPE][PIPE]

40

[PIPE]

12

[PIPE]

D1

[PIPE]

棕色(330欧姆后)

[PIPE][PIPE]
[PIPE][PIPE]

41

[PIPE]

9

[PIPE]

D2

[PIPE]

赭石(通过330欧姆)

[PIPE][PIPE]
[PIPE][PIPE]

42

[PIPE]

8

[PIPE]

D3

[PIPE]

灰色(330欧姆后)

[PIPE][PIPE]
[PIPE][PIPE]

43

[PIPE]

6

[PIPE]

D4

[PIPE]

白色(通过330欧姆)

[PIPE][PIPE]
[PIPE][PIPE]

5V

[PIPE]

-

[PIPE]

-

[PIPE]

红色

[PIPE][PIPE]
[PIPE][PIPE]

GND

[PIPE]

-

[PIPE]

-

[PIPE]

黑色

[PIPE][PIPE]
[PIPE]#

## 示例模型

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

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/cn/hardware-arduino/arduino-digitalread.html )。 块中设置数字输入号。 - 2. 使用有限状态机 edge_detector (座 Chart)输入信号的前沿被选择。 也就是说,当您单击按钮时,指示器的输入数据源将从块切换 year25 每块 year26.

## 准备工作

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

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 ),让我们启动AnyMath客户端程序。集成和连接我们的设备.

## 模型执行

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

<div>
<div样式="位置:相对;填充顶部:43.94%;">
<iframe src="https://exponenta.ru/storage/app/media/arduino_new_year_2026.mp4"frameborder="0"allowfullscreen
style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe>
</div>
</div>

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

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

按预期实施。

## 结论

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