Arduino: Новогодний выпуск
Пакет поддержки Arduino: цифровые входы и выходы
В этом примере мы снова работаем с цифровыми выходами Arduino MEGA, используя динамическую индикацию на четырёхразрядном семисегментном индикаторе 5461AS-1. Кроме того, мы задействуем цифровой вход для переключения отображаемых данных, а выделение фронта входного сигнала реализуем при помощи конечного автомата.
Введение
В предыдущих примерах мы уже рассмотрели: программирование семисегментного индикатора и динамической индикации. В этом примере мы объединим обе модели - разряды индикатора 5461AS будем переключать динамически, на каждый разряд выводя соответствующую последовательность зажигаемых сегментов.
Так как индикатор четырёхразрядный, а проект разрабатывается накануне Нового 2026 года, то мы реализуем индикацию смены года по нажатию на кнопку.
В примере мы используем также Arduino MEGA с цифровыми входами/выходами : 30 - 36 для сегментов, 40-44 для разрядов, 2 - для кнопки.
Кроме этого, для схемы понадобятся: макетная плата, кнопка, 4 резистора по 330 Ом для разрядов, 1 резистор 10 кОм и конденсатор 68 нФ для антидребезговой схемы.
Аппаратная часть
Схема соединений представлена ниже.

Подключения удобно выполнить согласно следующей таблице:
|
Пин 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 |
- |
- |
Чёрный |
Модель примера
Модель примера представлена на скриншоте ниже:

Управление динамической индикацией (переключением сегментов) осуществляется так же, как в примере с LED матрицей, за исключением того, что здесь только 4 разряда, переключающиеся с младшего до старшего.
Блок on_digit также определяет номер зажигаемого разряда, а между включениями разрядов гасятся все сегменты. Таким образом, последовательность в блоке определяется таким образом:
on_digit_data = [1, 0, 2, 0, 3, 0, 4, 0];
Формирование же последовательностей, которые включают сегменты, реализовано аналогично примеру с семисегментным индикатором. Управляющие данные для включения сегментов - последовательности в блоках Repeating Sequence Stair, которые согласно включаемому разряду индикатору передают на вывод ту или иную цифру для отображения. В модели заданы следующие входные данные:
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 из пакета поддержки Arduino - digitalRead. В блоке задан номер цифрового входа - 2. При помощи конечного автомата edge_detector (блок Chart) происходит выделение переднего фронта входного сигнала. То есть, при нажатии на кнопку источник входных данных для индикатора переключаются с блока year25 на блок year26.
Подготовка
При помощи этого блока кода автоматизируем запуск серверной программы Engee.Интеграции:
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.start(pkg))
else
updates = epkg.checkupdates(pkg)
if isnothing(updates)
@info "Package is up to date. Starting..."
# println("Ссылка для подключения к серверу:\n"*epkg.start(pkg))
else
@info "Updates available. Reinstalling and Starting..."
epkg.update(pkg)
@info "Package is up to date. Starting..."
# println("Ссылка для подключения к серверу:\n"*epkg.start(pkg))
end
end
end
epkg_start(PKGNAME)
Также за кадром, как обычно, запустим клиентскую программу Engee.Интеграции и подключим наше устройство.
Выполнение модели
Выполним модель в независимом режиме.
На записи мы можем наблюдать, что все заложенные функциональности:
- динамическая индикация по разрядам,
- вывод на сегменты заданных числовых значений,
- переключение отображаемых данных по переднему фронту входного сигнала
реализованы так, как и было задумано.
Заключение
В этом примере мы соединили два предыдущих примера работы с цифровыми выходами Arduino MEGA из пакета поддержки, динамическую индикацию и вывод семисегментных цифр. Кроме того, мы добавили цифровой вход и реализовали логику выделения переднего фронта сигнала при помощи конечного автомата.