Arduino: семисегментный индикатор
Пакет поддержки Arduino: цифровые выходы - семисегментный индикатор
Пример работы с несколькими цифровыми выходами Arduino MEGA. Подключаем и программируем работу семисегментного индикатора 5161AS.
Введение
В предыдущих примерах мы рассматривали работу с цифровым выходом Arduino. Теперь задействуем в Engee сразу несколько блоков цифрового выхода, закодировав в модели вывод последовательностей для индикации цифр на семисегментном индикаторе 5161AS.
В примере также используем Arduino Mega, также понадобятся резистор 330 Ом, соединительные провода, макетная плата.
Аппаратная часть
Схема соединений представлена ниже.

Подключения выполнены согласно таблице:
|
Сегмент |
Номер контакта 5161AS |
Цвет провода |
Пин Arduino MEGA |
|
A |
7 |
красный |
30 |
|
B |
6 |
оранжевый |
31 |
|
C |
4 |
жёлтый |
32 |
|
D |
2 |
зелёный |
33 |
|
E |
1 |
голубой |
34 |
|
F |
9 |
синий |
35 |
|
G |
10 |
фиолетовый |
36 |
|
dp |
5 |
не подключен |
не подключен |
|
- |
8 (3) |
черный |
GND |
Модель примера
В модели примера блок EDM-Target-Arduino имеет те же настройки, что и в предыдущем примере. В качестве периферии контроллера используются 7 блоков записи цифрового сигнала в пины 30-36.
Эти блоки получают числовые значения от демультиплексора, на который блоком переключателя подаются закодированные последовательности (блоки 1 - 0). Переключатель управляется блоком счётчика со сбросом, последовательно изменяющим используемый вход переключателя.

Закодированные последовательности зажигаемых на индикаторе сегментов можно определить следующим кодом:
]add LinearAlgebra # Устанавливаем библиотеку для создания единичной матрицы
using LinearAlgebra
A,B,C,D,E,F,G = [Matrix{Int}(I, 7, 7)[:, i] for i in 1:7];
# В этой строке создаём единичную матрицу 7*7 и при помощи генератора (comprehension) передаём её столбцы в переменные
# Последовательности для включения соответствующих сегментов в изображении числа определяем так:
one = B+C
two = A+B+G+E+D
three = A+B+G+C+D
four = F+G+B+C
five = A+F+G+C+E
six = A+F+G+E+D+C
seven = A+B+C
eight = A+B+C+D+E+F+G
nine = A+B+C+D+F+G
zero = collect(zeros(Int, 7));
Теперь эти переменные можно передать в константы модели, но для этого примера мы из встроили ("захардкодили") для наглядности.
Теперь перейдём к выполнению модели на Arduino.
Подготовка
При помощи этого блока кода автоматизируем запуск серверной программы 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.Интеграции и подключим наше устройство.
Выполнение модели
Выполним модель в интерактивном режиме.
На записи видно, что определённая в модели логика управления индикатором, а также отображение на нём кодирующих последовательностей отрабатывает корректно.
Теперь в Engee можно при помощи модели этого примера легко запрограммировать индикацию чисел с Arduino.
Заключение
В этом примере мы использовали пакет поддержки Arduino - элемента платформы Engee.Интеграции для программирования цифровых выходов микроконтроллера и индикации числен на семисегментном индикаторе.