Урок 1. Экран и кабина A: лифт едет по кнопкам

В картинках

После этого урока в доме есть одна кабина: жмёшь кнопки на её пульте — она едет, открывает двери на нужных этажах, звенит гонгом и сама решает, куда дальше: сначала все этажи в одну сторону, потом разворот. На экране видно, где кабина, открыты ли двери, какие кнопки нажаты и куда она едет.


1.1. Идея: кабина — автомат с памятью

Кабина помнит четыре вещи:

  • где она — положение, 5 бит: этаж (3 бита) и шаг между этажами (2 бита);
  • куда едет — направление, 1 бит;
  • открыты ли двери — таймер, 3 бита;
  • какие кнопки нажаты — 8 защёлок.

Раз в такт (Clock 2Hz, полсекунды) автомат смотрит на всё это и решает: стоять, открыть двери, ехать вверх или вниз. Этаж кабина проезжает за 4 такта — 2 секунды, двери держит открытыми тоже 2 секунды.

положениеp4…p0 · 5 битнаправлениеdir · 1 биттаймер дверейt2…t0 · 3 битакнопкиAK0…AK7 · 8 защёлокрешениестоять · двери · вверх · внизновое состояниена фронте CLKкаждый такт — снова; кнопки ставит палец, а не такт
Кабина — автомат с памятью. Раз в такт он смотрит, где кабина, куда едет, открыты ли двери и какие кнопки нажаты, решает, что делать, и на фронте CLK записывает новое положение, направление и таймер. Кнопки — защёлки: их ставит нажатие сразу, а гасят открытые двери.
801000эт. 3901001100101011010111201100эт. 41301101140111015011111610000эт. 51710001181001019100112010100эт. 6положениеp4 p3 p2p1 p0p4 p3 p2 — этаж (на экране +1), p1 p0 — шаг между этажамиatF = NOR(p0, p1) = 1 только когда шаг 00 — кабина ровно на этаже
Положение — одно число из 5 бит: этаж × 4 + шаг. Старшие три бита — этаж, младшие два — сколько тактов кабина уже проехала от него. Счётчик прибавляет 1 вверх или вычитает 1 вниз; этаж проезжается за 4 такта.
стоит, двери закрытыедет вверх к 5-муна 5-м, двери открыты
Шахта A на экране: рамка со створками — кабина стоит с закрытыми дверями; полоска — кабина в пути; пустая рамка — двери открыты. Точка справа — нажатая кнопка в кабине, цифра — этаж, стрелка — куда едет.

1.2. Идея: в одну сторону, пока есть куда

Правило настоящих лифтов: едем в одну сторону и останавливаемся на каждом нажатом этаже по пути; развернуться можно, только когда впереди нажатых кнопок не осталось. Для этого кабине надо знать два факта:

  • UPR — есть нажатая кнопка выше кабины;
  • DNR — есть нажатая кнопка ниже.

«Выше» и «ниже» дают цепочки ИЛИ — термометр: у кабины на 4-м этаже «выше» — это 5, 6, 7, 8, «ниже» — 1, 2, 3. Решение на этаже:

  • вверх: UPR И (едем вверх ИЛИ НЕ DNR);
  • вниз: DNR И (едем вниз ИЛИ НЕ UPR).
этажya: кабина нижеb: кабина вышекнопка80107010●60105010410030012001●1001UPR = 17 выше кабиныDNR = 12 ниже кабины
Термометр. Кабина на 4-м: горит y3. Одна цепочка ИЛИ зажигает a — «кабина ниже этого этажа» — у 5-го, 6-го, 7-го, 8-го, другая — b, «кабина выше этого этажа», — у 1-го, 2-го, 3-го. ВЫШЕ = ИЛИ(кнопка И a), НИЖЕ = ИЛИ(кнопка И b): нажаты 7 и 2 — есть дела и выше, и ниже.
едемвышенижерешениевверх1—дальше вверхвверх01разворот внизвниз—1дальше внизвниз10разворот вверхлюбое00стоять, «вниз»
Решение на этаже, когда двери закрыты и здесь стоять не надо. Главное правило лифтов: едем в одну сторону, пока там есть дела, и только потом разворачиваемся. Дел нет совсем — кабина стоит свободной.

1.3. Идея: кнопка — защёлка, а не триггер

Кнопку жмут на долю секунды, а такт — полсекунды: триггер, который пишет только на фронте, нажатие пропустил бы. Поэтому кнопка ставит защёлку сразу. Гасят её три вещи: двери открылись на этом этаже, кнопка «Отмена» (гасит все кнопки кабины разом) и сброс. Нажал не тот этаж — «Отмена», потом нужный.

CLKкнопкатриггерзащёлкапропустилзапомнила
Кнопку жмут на долю секунды — между фронтами CLK. Триггер смотрит на вход только в момент фронта и нажатие пропустит. Защёлка SRLatch ставится сразу и держит 1, пока её не погасят: двери открылись на этом этаже, «Отмена» или сброс.
heret043210OPENдвери открыты 4 такта — 2 секунды
Таймер дверей: на такте «здесь» в него кладётся 4, потом каждый такт он уменьшается на 1 (три FA прибавляют 111). Пока он не 0 — двери открыты (OPEN = ИЛИ трёх бит), кабина стоит, кнопка этого этажа гаснет.

1.4. Сборка

Новый проект. Нужны вентили NOT, NAND, NOR, AND, OR, XOR: уже есть в библиотеке из другого набора серии — бери; хочешь собрать с нуля — урок 0; сразу к делу — вставь урок 0 (Cmd+I).

Шаг 1. Чип SRLatch — защёлка: S — запомнить 1, R — запомнить 0

Если SRLatch уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходR
Порт входавыходS
Порт выходавходQ
Порт выходавходnQ
NORI0
I1
O0
R
nQ
Q
NORI0
I1
O0
S
Q
nQ

Ctrl+G → имя SRLatch. Ноги: входы R, S; выходы Q, nQ.

Шаг 2. Чип DLatch — защёлка данных

Если DLatch уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходD
Порт входавыходEN
Порт выходавходQ
Порт выходавходnQ
NOTI0
O0
D
nD
ANDI0
I1
O0
D
EN
setD
ANDI0
I1
O0
nD
EN
rstD
SRLatchS
R
Q
nQ
setD
rstD
Q
nQ

Ctrl+G → имя DLatch. Ноги: входы D, EN; выходы Q, nQ.

Шаг 3. Чип DFF — триггер: запоминает D на фронте CLK

Если DFF уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходD
Порт входавыходCLK
Порт выходавходQ
Порт выходавходnQ
NOTI0
O0
CLK
nCLK
DLatchD
EN
Q
D
nCLK
mid
DLatchD
EN
Q
nQ
mid
CLK
Q
nQ

Ctrl+G → имя DFF. Ноги: входы D, CLK; выходы Q, nQ.

Шаг 4. Чип FA — полный сумматор

Если FA уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходCI
Порт выходавходS
Порт выходавходCO
XORI0
I1
O0
A
B
p
XORI0
I1
O0
p
CI
S
ANDI0
I1
O0
A
B
g
ANDI0
I1
O0
p
CI
pc
ORI0
I1
O0
g
pc
CO

Ctrl+G → имя FA. Ноги: входы A, B, CI; выходы S, CO.

Шаг 5. Чип MUX2 — выбор из двух

Если MUX2 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходS
Порт выходавходY
NOTI0
O0
S
nS
NANDI0
I1
O0
A
nS
na
NANDI0
I1
O0
B
S
nb
NANDI0
I1
O0
na
nb
Y

Ctrl+G → имя MUX2. Ноги: входы A, B, S; выходы Y.

Шаг 6. Чип AND3 — И на 3 входа

Если AND3 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт выходавходY
ANDI0
I1
O0
A
B
ab
ANDI0
I1
O0
ab
C
Y

Ctrl+G → имя AND3. Ноги: входы A, B, C; выходы Y.

Шаг 7. Чип OR3 — ИЛИ на 3 входа

Если OR3 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт выходавходY
ORI0
I1
O0
A
B
ab
ORI0
I1
O0
ab
C
Y

Ctrl+G → имя OR3. Ноги: входы A, B, C; выходы Y.

Шаг 8. Чип OR4 — ИЛИ на 4 входа

Если OR4 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт входавыходD
Порт выходавходY
ORI0
I1
O0
A
B
ab
ORI0
I1
O0
C
D
cd
ORI0
I1
O0
ab
cd
Y

Ctrl+G → имя OR4. Ноги: входы A, B, C, D; выходы Y.

Шаг 9. Чип OR8 — ИЛИ на 8 входов

Если OR8 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт входавыходD
Порт входавыходE
Порт входавыходF
Порт входавыходG
Порт входавыходH
Порт выходавходY
OR4A
B
C
D
Y
A
B
C
D
lo
OR4A
B
C
D
Y
E
F
G
H
hi
ORI0
I1
O0
lo
hi
Y

Ctrl+G → имя OR8. Ноги: входы A, B, C, D, E, F, G, H; выходы Y.

Шаг 10. Чип DEC8 — дешифратор 3 → 8: горит один провод из восьми

Если DEC8 уже есть в библиотеке (из другого набора серии) — шаг пропусти.

ДетальНогаМетка
Порт входавыходI0
Порт входавыходI1
Порт входавыходI2
Порт выходавходY0
Порт выходавходY1
Порт выходавходY2
Порт выходавходY3
Порт выходавходY4
Порт выходавходY5
Порт выходавходY6
Порт выходавходY7
NOTI0
O0
I0
n0
NOTI0
O0
I1
n1
NOTI0
O0
I2
n2
AND3A
B
C
Y
n2
n1
n0
Y0
AND3A
B
C
Y
n2
n1
I0
Y1
AND3A
B
C
Y
n2
I1
n0
Y2
AND3A
B
C
Y
n2
I1
I0
Y3
AND3A
B
C
Y
I2
n1
n0
Y4
AND3A
B
C
Y
I2
n1
I0
Y5
AND3A
B
C
Y
I2
I1
n0
Y6
AND3A
B
C
Y
I2
I1
I0
Y7

Ctrl+G → имя DEC8. Ноги: входы I0, I1, I2; выходы Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7.

Шаг 11. Экран: картинка и 152 ноги

Segment LCD из палитры, ⚙ → ⬆ → project/lift/screen/lift-screen.png (88 × 130 точек). Включи Ghost. Разметка: S, клик по пятну (палочка), Enter, имя, Enter — нога появится на корпусе, метка с её именем — рядом. Каждый сегмент — одно пятно, один клик. Буквы шахт, номера этажей и стенки — фон, их не размечать.

Размечаем весь экран сразу, все три шахты: ноги шахт B и C, ▶ и квадратов вызова пока ни к чему не подключены и не горят — их провода появятся в уроках 2–4. Сегменты цифры: a — верх, дальше по часовой, g — середина.

Что на экранеИмя ноги
шахта A, этаж 1 — рамка кабиныAC0
шахта A, этаж 2 — рамка кабиныAC1
шахта A, этаж 3 — рамка кабиныAC2
шахта A, этаж 4 — рамка кабиныAC3
шахта A, этаж 5 — рамка кабиныAC4
шахта A, этаж 6 — рамка кабиныAC5
шахта A, этаж 7 — рамка кабиныAC6
шахта A, этаж 8 — рамка кабиныAC7
шахта A, этаж 1 — створки (внутри рамки)AD0
шахта A, этаж 2 — створки (внутри рамки)AD1
шахта A, этаж 3 — створки (внутри рамки)AD2
шахта A, этаж 4 — створки (внутри рамки)AD3
шахта A, этаж 5 — створки (внутри рамки)AD4
шахта A, этаж 6 — створки (внутри рамки)AD5
шахта A, этаж 7 — створки (внутри рамки)AD6
шахта A, этаж 8 — створки (внутри рамки)AD7
шахта A, полоска между этажами 1 и 2AM0
шахта A, полоска между этажами 2 и 3AM1
шахта A, полоска между этажами 3 и 4AM2
шахта A, полоска между этажами 4 и 5AM3
шахта A, полоска между этажами 5 и 6AM4
шахта A, полоска между этажами 6 и 7AM5
шахта A, полоска между этажами 7 и 8AM6
шахта A, этаж 1 — точка справа (кнопка в кабине)AK0
шахта A, этаж 2 — точка справа (кнопка в кабине)AK1
шахта A, этаж 3 — точка справа (кнопка в кабине)AK2
шахта A, этаж 4 — точка справа (кнопка в кабине)AK3
шахта A, этаж 5 — точка справа (кнопка в кабине)AK4
шахта A, этаж 6 — точка справа (кнопка в кабине)AK5
шахта A, этаж 7 — точка справа (кнопка в кабине)AK6
шахта A, этаж 8 — точка справа (кнопка в кабине)AK7
шахта A, этаж 1 — ▶ слева (назначен вызов)AG0
шахта A, этаж 2 — ▶ слева (назначен вызов)AG1
шахта A, этаж 3 — ▶ слева (назначен вызов)AG2
шахта A, этаж 4 — ▶ слева (назначен вызов)AG3
шахта A, этаж 5 — ▶ слева (назначен вызов)AG4
шахта A, этаж 6 — ▶ слева (назначен вызов)AG5
шахта A, этаж 7 — ▶ слева (назначен вызов)AG6
шахта A, этаж 8 — ▶ слева (назначен вызов)AG7
шахта A, цифра над шахтой — сегмент aAFa
шахта A, цифра над шахтой — сегмент bAFb
шахта A, цифра над шахтой — сегмент cAFc
шахта A, цифра над шахтой — сегмент dAFd
шахта A, цифра над шахтой — сегмент eAFe
шахта A, цифра над шахтой — сегмент fAFf
шахта A, цифра над шахтой — сегмент gAFg
шахта A, стрелка ▲AUP
шахта A, стрелка ▼ADN
шахта B, этаж 1 — рамка кабиныBC0
шахта B, этаж 2 — рамка кабиныBC1
шахта B, этаж 3 — рамка кабиныBC2
шахта B, этаж 4 — рамка кабиныBC3
шахта B, этаж 5 — рамка кабиныBC4
шахта B, этаж 6 — рамка кабиныBC5
шахта B, этаж 7 — рамка кабиныBC6
шахта B, этаж 8 — рамка кабиныBC7
шахта B, этаж 1 — створки (внутри рамки)BD0
шахта B, этаж 2 — створки (внутри рамки)BD1
шахта B, этаж 3 — створки (внутри рамки)BD2
шахта B, этаж 4 — створки (внутри рамки)BD3
шахта B, этаж 5 — створки (внутри рамки)BD4
шахта B, этаж 6 — створки (внутри рамки)BD5
шахта B, этаж 7 — створки (внутри рамки)BD6
шахта B, этаж 8 — створки (внутри рамки)BD7
шахта B, полоска между этажами 1 и 2BM0
шахта B, полоска между этажами 2 и 3BM1
шахта B, полоска между этажами 3 и 4BM2
шахта B, полоска между этажами 4 и 5BM3
шахта B, полоска между этажами 5 и 6BM4
шахта B, полоска между этажами 6 и 7BM5
шахта B, полоска между этажами 7 и 8BM6
шахта B, этаж 1 — точка справа (кнопка в кабине)BK0
шахта B, этаж 2 — точка справа (кнопка в кабине)BK1
шахта B, этаж 3 — точка справа (кнопка в кабине)BK2
шахта B, этаж 4 — точка справа (кнопка в кабине)BK3
шахта B, этаж 5 — точка справа (кнопка в кабине)BK4
шахта B, этаж 6 — точка справа (кнопка в кабине)BK5
шахта B, этаж 7 — точка справа (кнопка в кабине)BK6
шахта B, этаж 8 — точка справа (кнопка в кабине)BK7
шахта B, этаж 1 — ▶ слева (назначен вызов)BG0
шахта B, этаж 2 — ▶ слева (назначен вызов)BG1
шахта B, этаж 3 — ▶ слева (назначен вызов)BG2
шахта B, этаж 4 — ▶ слева (назначен вызов)BG3
шахта B, этаж 5 — ▶ слева (назначен вызов)BG4
шахта B, этаж 6 — ▶ слева (назначен вызов)BG5
шахта B, этаж 7 — ▶ слева (назначен вызов)BG6
шахта B, этаж 8 — ▶ слева (назначен вызов)BG7
шахта B, цифра над шахтой — сегмент aBFa
шахта B, цифра над шахтой — сегмент bBFb
шахта B, цифра над шахтой — сегмент cBFc
шахта B, цифра над шахтой — сегмент dBFd
шахта B, цифра над шахтой — сегмент eBFe
шахта B, цифра над шахтой — сегмент fBFf
шахта B, цифра над шахтой — сегмент gBFg
шахта B, стрелка ▲BUP
шахта B, стрелка ▼BDN
шахта C, этаж 1 — рамка кабиныCC0
шахта C, этаж 2 — рамка кабиныCC1
шахта C, этаж 3 — рамка кабиныCC2
шахта C, этаж 4 — рамка кабиныCC3
шахта C, этаж 5 — рамка кабиныCC4
шахта C, этаж 6 — рамка кабиныCC5
шахта C, этаж 7 — рамка кабиныCC6
шахта C, этаж 8 — рамка кабиныCC7
шахта C, этаж 1 — створки (внутри рамки)CD0
шахта C, этаж 2 — створки (внутри рамки)CD1
шахта C, этаж 3 — створки (внутри рамки)CD2
шахта C, этаж 4 — створки (внутри рамки)CD3
шахта C, этаж 5 — створки (внутри рамки)CD4
шахта C, этаж 6 — створки (внутри рамки)CD5
шахта C, этаж 7 — створки (внутри рамки)CD6
шахта C, этаж 8 — створки (внутри рамки)CD7
шахта C, полоска между этажами 1 и 2CM0
шахта C, полоска между этажами 2 и 3CM1
шахта C, полоска между этажами 3 и 4CM2
шахта C, полоска между этажами 4 и 5CM3
шахта C, полоска между этажами 5 и 6CM4
шахта C, полоска между этажами 6 и 7CM5
шахта C, полоска между этажами 7 и 8CM6
шахта C, этаж 1 — точка справа (кнопка в кабине)CK0
шахта C, этаж 2 — точка справа (кнопка в кабине)CK1
шахта C, этаж 3 — точка справа (кнопка в кабине)CK2
шахта C, этаж 4 — точка справа (кнопка в кабине)CK3
шахта C, этаж 5 — точка справа (кнопка в кабине)CK4
шахта C, этаж 6 — точка справа (кнопка в кабине)CK5
шахта C, этаж 7 — точка справа (кнопка в кабине)CK6
шахта C, этаж 8 — точка справа (кнопка в кабине)CK7
шахта C, этаж 1 — ▶ слева (назначен вызов)CG0
шахта C, этаж 2 — ▶ слева (назначен вызов)CG1
шахта C, этаж 3 — ▶ слева (назначен вызов)CG2
шахта C, этаж 4 — ▶ слева (назначен вызов)CG3
шахта C, этаж 5 — ▶ слева (назначен вызов)CG4
шахта C, этаж 6 — ▶ слева (назначен вызов)CG5
шахта C, этаж 7 — ▶ слева (назначен вызов)CG6
шахта C, этаж 8 — ▶ слева (назначен вызов)CG7
шахта C, цифра над шахтой — сегмент aCFa
шахта C, цифра над шахтой — сегмент bCFb
шахта C, цифра над шахтой — сегмент cCFc
шахта C, цифра над шахтой — сегмент dCFd
шахта C, цифра над шахтой — сегмент eCFe
шахта C, цифра над шахтой — сегмент fCFf
шахта C, цифра над шахтой — сегмент gCFg
шахта C, стрелка ▲CUP
шахта C, стрелка ▼CDN
этаж 1 — квадрат у номера (вызов на этаже)H0
этаж 2 — квадрат у номера (вызов на этаже)H1
этаж 3 — квадрат у номера (вызов на этаже)H2
этаж 4 — квадрат у номера (вызов на этаже)H3
этаж 5 — квадрат у номера (вызов на этаже)H4
этаж 6 — квадрат у номера (вызов на этаже)H5
этаж 7 — квадрат у номера (вызов на этаже)H6
этаж 8 — квадрат у номера (вызов на этаже)H7

Шаг 12. Питание, такт, сброс

Clock — клик по корпусу до 2Hz: такт — полсекунды, этаж кабина проезжает за 4 такта (2 секунды), двери держит открытыми 4 такта. RST — тумблер сброса; nR — его переворот, он стоит перед каждым триггером.

ДетальНогаМетка
PowerвыходVCC
GroundвыходGND
ClockвыходCLK
Input (тумблер)выходRST
NOTI0
O0
RST
nR

Шаг 13. Пульт кабины A

Восемь кнопок этажей и «Отмена». Поставь их столбиком справа от экрана, «8» сверху: это пульт в кабине A. Жмём мышью.

ДетальНогаМетка
Button «1»выходAB0
Button «2»выходAB1
Button «3»выходAB2
Button «4»выходAB3
Button «5»выходAB4
Button «6»выходAB5
Button «7»выходAB6
Button «8»выходAB7
Button «Отмена»выходACAN

Шаг 14. Где кабина

Положение — 5 бит: p4 p3 p2 — этаж (0–7, на экране 1–8), p1 p0 — шаг между этажами. atF = 1, когда шаг 0: кабина стоит ровно на этаже. DEC8 зажигает один провод y0–y7 — этаж кабины.

ДетальНогаМетка
NORI0
I1
O0
p0
p1
atF
NOTI0
O0
atF
natF
DEC8I0
I1
I2
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
p2
p3
p4
y0
y1
y2
y3
y4
y5
y6
y7

Шаг 15. Двери открыты

Таймер дверей t2 t1 t0 (шаг «Таймер дверей»): пока он не 0, двери открыты (OPEN).

ДетальНогаМетка
OR3A
B
C
Y
t0
t1
t2
OPEN
NOTI0
O0
OPEN
ndoor

Шаг 16. Кабина на этаже

AC<f> — кабина стоит на этаже f: это и рамка на экране. O<f> — на этаже f открыты двери: он гасит кнопку этого этажа.

ДетальНогаМетка
ANDI0
I1
O0
y0
atF
AC0
ANDI0
I1
O0
AC0
OPEN
O0
ANDI0
I1
O0
y1
atF
AC1
ANDI0
I1
O0
AC1
OPEN
O1
ANDI0
I1
O0
y2
atF
AC2
ANDI0
I1
O0
AC2
OPEN
O2
ANDI0
I1
O0
y3
atF
AC3
ANDI0
I1
O0
AC3
OPEN
O3
ANDI0
I1
O0
y4
atF
AC4
ANDI0
I1
O0
AC4
OPEN
O4
ANDI0
I1
O0
y5
atF
AC5
ANDI0
I1
O0
AC5
OPEN
O5
ANDI0
I1
O0
y6
atF
AC6
ANDI0
I1
O0
AC6
OPEN
O6
ANDI0
I1
O0
y7
atF
AC7
ANDI0
I1
O0
AC7
OPEN
O7

Шаг 17. Кнопки в кабине — защёлки

Кнопку жмут на долю секунды, а такт — полсекунды: триггер нажатие пропустил бы. Поэтому кнопка ставит защёлку SRLatch сразу. Гасит защёлку kr<f>: двери открыты на этом этаже, или «Отмена» (kc — она гасит все восемь), или сброс. Пока гасится, нажатие не проходит: S и R вместе защёлке давать нельзя. Выход AK<f> — точка справа от шахты.

ДетальНогаМетка
ORI0
I1
O0
ACAN
RST
kc
ORI0
I1
O0
O0
kc
kr0
NOTI0
O0
kr0
nkr0
ANDI0
I1
O0
AB0
nkr0
ks0
SRLatchS
R
Q
ks0
kr0
AK0
ORI0
I1
O0
O1
kc
kr1
NOTI0
O0
kr1
nkr1
ANDI0
I1
O0
AB1
nkr1
ks1
SRLatchS
R
Q
ks1
kr1
AK1
ORI0
I1
O0
O2
kc
kr2
NOTI0
O0
kr2
nkr2
ANDI0
I1
O0
AB2
nkr2
ks2
SRLatchS
R
Q
ks2
kr2
AK2
ORI0
I1
O0
O3
kc
kr3
NOTI0
O0
kr3
nkr3
ANDI0
I1
O0
AB3
nkr3
ks3
SRLatchS
R
Q
ks3
kr3
AK3
ORI0
I1
O0
O4
kc
kr4
NOTI0
O0
kr4
nkr4
ANDI0
I1
O0
AB4
nkr4
ks4
SRLatchS
R
Q
ks4
kr4
AK4
ORI0
I1
O0
O5
kc
kr5
NOTI0
O0
kr5
nkr5
ANDI0
I1
O0
AB5
nkr5
ks5
SRLatchS
R
Q
ks5
kr5
AK5
ORI0
I1
O0
O6
kc
kr6
NOTI0
O0
kr6
nkr6
ANDI0
I1
O0
AB6
nkr6
ks6
SRLatchS
R
Q
ks6
kr6
AK6
ORI0
I1
O0
O7
kc
kr7
NOTI0
O0
kr7
nkr7
ANDI0
I1
O0
AB7
nkr7
ks7
SRLatchS
R
Q
ks7
kr7
AK7

Шаг 18. Термометр: что ниже, что выше

a<f> = 1, если кабина ниже этажа f; b<f> = 1, если выше. Это цепочки ИЛИ от горящего y: у кабины на 4-м этаже горят a5, a6, a7 и b0…b2. Для 1-го и 8-го этажа хватает самих y0 и y7.

ДетальНогаМетка
ORI0
I1
O0
y0
y1
a2
ORI0
I1
O0
a2
y2
a3
ORI0
I1
O0
a3
y3
a4
ORI0
I1
O0
a4
y4
a5
ORI0
I1
O0
a5
y5
a6
ORI0
I1
O0
a6
y6
a7
ORI0
I1
O0
y7
y6
b5
ORI0
I1
O0
b5
y5
b4
ORI0
I1
O0
b4
y4
b3
ORI0
I1
O0
b3
y3
b2
ORI0
I1
O0
b2
y2
b1
ORI0
I1
O0
b1
y1
b0

Шаг 19. Есть заявка выше? ниже?

UPR — есть нажатая кнопка выше кабины: ИЛИ от «кнопка f И кабина ниже f». DNR — то же вниз.

ДетальНогаМетка
ANDI0
I1
O0
AK1
y0
ru1
ANDI0
I1
O0
AK2
a2
ru2
ANDI0
I1
O0
AK3
a3
ru3
ANDI0
I1
O0
AK4
a4
ru4
ANDI0
I1
O0
AK5
a5
ru5
ANDI0
I1
O0
AK6
a6
ru6
ANDI0
I1
O0
AK7
a7
ru7
OR8A
B
C
D
E
F
G
H
Y
ru1
ru2
ru3
ru4
ru5
ru6
ru7
GND
UPR
ANDI0
I1
O0
AK0
b0
rd0
ANDI0
I1
O0
AK1
b1
rd1
ANDI0
I1
O0
AK2
b2
rd2
ANDI0
I1
O0
AK3
b3
rd3
ANDI0
I1
O0
AK4
b4
rd4
ANDI0
I1
O0
AK5
b5
rd5
ANDI0
I1
O0
AK6
y7
rd6
OR8A
B
C
D
E
F
G
H
Y
rd0
rd1
rd2
rd3
rd4
rd5
rd6
GND
DNR

Шаг 20. Кнопка этого этажа

hK — нажата кнопка того этажа, где кабина. gOK — «едем вниз или выше пусто»: пригодится в решении и в уроке 2.

ДетальНогаМетка
ANDI0
I1
O0
AK0
y0
hk0
ANDI0
I1
O0
AK1
y1
hk1
ANDI0
I1
O0
AK2
y2
hk2
ANDI0
I1
O0
AK3
y3
hk3
ANDI0
I1
O0
AK4
y4
hk4
ANDI0
I1
O0
AK5
y5
hk5
ANDI0
I1
O0
AK6
y6
hk6
ANDI0
I1
O0
AK7
y7
hk7
OR8A
B
C
D
E
F
G
H
Y
hk0
hk1
hk2
hk3
hk4
hk5
hk6
hk7
hK
NOTI0
O0
dir
ndir
NOTI0
O0
UPR
nUPR
ORI0
I1
O0
ndir
nUPR
gOK

Шаг 21. Здесь: остановиться

here — стоим на этаже, двери закрыты, нажата кнопка этого этажа: открыть двери. Он же звенит гонгом (последний шаг).

ДетальНогаМетка
AND3A
B
C
Y
atF
ndoor
hK
here

Шаг 22. Решение: вверх или вниз

На этаже (двери закрыты, здесь не стоим) кабина решает: вверх, если есть заявки выше и (едем вверх или ниже пусто); вниз — наоборот. Едем в одну сторону, пока там есть заявки, — и только потом разворачиваемся.

ДетальНогаМетка
NOTI0
O0
DNR
nDNR
ORI0
I1
O0
dir
nDNR
uOK
ANDI0
I1
O0
UPR
uOK
mvUp
ANDI0
I1
O0
DNR
gOK
mvDn
NOTI0
O0
here
nhere
AND3A
B
C
Y
atF
ndoor
nhere
decide

Шаг 23. Направление

На этаже направление решается заново (mvUp; нет заявок — «вниз»), в пути и у открытых дверей держится. Триггер dir: 1 — вверх.

ДетальНогаМетка
MUX2A
B
S
Y
dir
mvUp
decide
dirN
ANDI0
I1
O0
dirN
nR
dirD
DFFD
CLK
Q
dirD
CLK
dir

Шаг 24. Ход

go — двигаться на этом такте: между этажами — всегда (посреди шахты лифт не стоит), на этаже — если решили ехать.

ДетальНогаМетка
ORI0
I1
O0
mvUp
mvDn
mv
ANDI0
I1
O0
decide
mv
go1
ORI0
I1
O0
natF
go1
go

Шаг 25. Счётчик положения

Пять FA прибавляют к положению +1 (вверх) или 11111 (это −1: вниз) — или 0, если стоим. AND с nR — сброс на 1-й этаж.

ДетальНогаМетка
NOTI0
O0
dirN
ndirN
ANDI0
I1
O0
go
ndirN
dn
FAA
B
CI
S
CO
p0
go
GND
q0
c0
FAA
B
CI
S
CO
p1
dn
c0
q1
c1
FAA
B
CI
S
CO
p2
dn
c1
q2
c2
FAA
B
CI
S
CO
p3
dn
c2
q3
c3
FAA
B
CI
S
CO
p4
dn
c3
q4
c4
ANDI0
I1
O0
q0
nR
pd0
DFFD
CLK
Q
pd0
CLK
p0
ANDI0
I1
O0
q1
nR
pd1
DFFD
CLK
Q
pd1
CLK
p1
ANDI0
I1
O0
q2
nR
pd2
DFFD
CLK
Q
pd2
CLK
p2
ANDI0
I1
O0
q3
nR
pd3
DFFD
CLK
Q
pd3
CLK
p3
ANDI0
I1
O0
q4
nR
pd4
DFFD
CLK
Q
pd4
CLK
p4

Шаг 26. Таймер дверей

Открылись (here) — 4 (100), открыты — минус 1 (три FA прибавляют 111), закрыты — 0. Двери открыты 4 такта — 2 секунды.

ДетальНогаМетка
FAA
B
CI
S
CO
t0
VCC
GND
u0
e0
FAA
B
CI
S
CO
t1
VCC
e0
u1
e1
FAA
B
CI
S
CO
t2
VCC
e1
u2
e2
ANDI0
I1
O0
u0
OPEN
v0
ANDI0
I1
O0
u1
OPEN
v1
ANDI0
I1
O0
u2
OPEN
v2a
ORI0
I1
O0
v2a
here
v2
ANDI0
I1
O0
v0
nR
td0
DFFD
CLK
Q
td0
CLK
t0
ANDI0
I1
O0
v1
nR
td1
DFFD
CLK
Q
td1
CLK
t1
ANDI0
I1
O0
v2
nR
td2
DFFD
CLK
Q
td2
CLK
t2

Шаг 27. Стрелки

Стрелка горит, пока есть заявки или кабина в пути: ▲ — направление вверх, ▼ — вниз.

ДетальНогаМетка
OR8A
B
C
D
E
F
G
H
Y
AK0
AK1
AK2
AK3
AK4
AK5
AK6
AK7
rAny
ORI0
I1
O0
rAny
natF
busy
ANDI0
I1
O0
dir
busy
AUP
ANDI0
I1
O0
ndir
busy
ADN

Шаг 28. Экран: створки, полоска, цифра

AD<f> — створки: кабина на этаже f и двери закрыты. AM<f> — кабина в пути между этажами f и f+1. Цифра этажа — из одного горящего y: сегмент горит на тех этажах, где он нужен (a — на 2, 3, 5, 6, 7, 8 …), поэтому каждый сегмент — одно ИЛИ.

ДетальНогаМетка
ANDI0
I1
O0
AC0
ndoor
AD0
ANDI0
I1
O0
AC1
ndoor
AD1
ANDI0
I1
O0
AC2
ndoor
AD2
ANDI0
I1
O0
AC3
ndoor
AD3
ANDI0
I1
O0
AC4
ndoor
AD4
ANDI0
I1
O0
AC5
ndoor
AD5
ANDI0
I1
O0
AC6
ndoor
AD6
ANDI0
I1
O0
AC7
ndoor
AD7
ANDI0
I1
O0
y0
natF
AM0
ANDI0
I1
O0
y1
natF
AM1
ANDI0
I1
O0
y2
natF
AM2
ANDI0
I1
O0
y3
natF
AM3
ANDI0
I1
O0
y4
natF
AM4
ANDI0
I1
O0
y5
natF
AM5
ANDI0
I1
O0
y6
natF
AM6
OR8A
B
C
D
E
F
G
H
Y
y1
y2
y4
y5
y6
y7
GND
GND
AFa
OR8A
B
C
D
E
F
G
H
Y
y0
y1
y2
y3
y6
y7
GND
GND
AFb
OR8A
B
C
D
E
F
G
H
Y
y0
y2
y3
y4
y5
y6
y7
GND
AFc
OR8A
B
C
D
E
F
G
H
Y
y1
y2
y4
y5
y7
GND
GND
GND
AFd
OR3A
B
C
Y
y1
y5
y7
AFe
OR4A
B
C
D
Y
y3
y4
y5
y7
AFf
OR8A
B
C
D
E
F
G
H
Y
y1
y2
y3
y4
y5
y7
GND
GND
AFg

Шаг 29. Гонг

Speaker из палитры: клик по значку слева — режим «зуммер», по решётке — тон 880. Звенит, пока открываются двери (here).

ДетальНогаМетка
Speaker (зуммер, 880)SPKRhere

1.5. Проверка

Плату не сворачивать — в уроке 2 к ней добавятся кнопки вызова на этажах.

  1. RST включить и выключить. На экране в шахте A: кабина на 1-м этаже — рамка со створками (двери закрыты), над шахтой цифра 1, стрелок нет.
  2. Нажми 5. Справа от шахты у 5-го этажа загорается точка, над шахтой — ▲. Кабина едет: рамка гаснет, между этажами горит полоска, цифра растёт 1 → 2 → 3 → 4. Через 8 секунд кабина на 5-м: звенит гонг, рамка пустая (двери открыты), точка гаснет, ▲ гаснет. Через 2 секунды появляются створки — двери закрылись.
  3. Нажми 7, 8 и 3. Кабина едет вверх: открывает двери на 7-м, потом на 8-м, потом ▼ — и едет вниз на 3-й. Мимо 3-го вверх не поехала бы: сначала все заявки в одну сторону, потом разворот.
  4. Нажми 6, потом Отмена, потом 5. Точка у 6 гаснет, кабина едет на 5-й.
  5. Нажми 1 и, пока кабина едет, — Отмена. Кабина доезжает до ближайшего этажа и встаёт, двери не открывает: посреди шахты лифт не останавливается.
  6. Кабина стоит с закрытыми дверями — нажми кнопку её этажа: двери открываются сразу. Пока двери открыты, кнопка этого этажа не загорается.
Что видноЧто это
рамка со створкамикабина стоит на этаже, двери закрыты
пустая рамкакабина стоит на этаже, двери открыты
полоска между этажамикабина в пути
точка справа от шахтынажата кнопка этого этажа в кабине
цифра над шахтойэтаж кабины (в пути — тот, что ниже)
▲ / ▼куда едет, пока есть заявки
шахты B, C, ▶, квадратыне горят — их подключим в уроках 2–4

Вставка урока 1 (Cmd+I)

Нужны вентили NOT, NAND, NOR, AND, OR, XOR (урок 0 или его вставка) и детали шагов 1–10 (SRLatch … DEC8) — они в начале вставки; если уже есть в библиотеке, удали их блоки chip. Экран (Segment LCD) и тон гонга — вручную, шаги 11 и 29.

# Урок 1 — экран и кабина A: положение, кнопки в кабине и «Отмена», двери, вверх / вниз / здесь.# Вставка: Cmd+I в проект, где есть детали урока (вентили, защёлки, FA, MUX2, DEC8 …). Segment LCD и Clock 2Hz — руками. # ---------- детали (если уже есть в библиотеке — удали их блоки) ----------chip SRLatch {  portIn(R)  portIn(S)  portOut(Q)  portOut(nQ)  NOR(R, nQ, Q)  NOR(S, Q, nQ)}chip DLatch {  portIn(D)  portIn(EN)  portOut(Q)  portOut(nQ)  NOT(D, nD)  AND(D, EN, setD)  AND(nD, EN, rstD)  SRLatch(S=setD, R=rstD, Q=Q, nQ=nQ)}chip DFF {  portIn(D)  portIn(CLK)  portOut(Q)  portOut(nQ)  NOT(CLK, nCLK)  DLatch(D=D, EN=nCLK, Q=mid)  DLatch(D=mid, EN=CLK, Q=Q, nQ=nQ)}chip FA {  portIn(A)  portIn(B)  portIn(CI)  portOut(S)  portOut(CO)  XOR(A, B, p)  XOR(p, CI, S)  AND(A, B, g)  AND(p, CI, pc)  OR(g, pc, CO)}chip MUX2 {  portIn(A)  portIn(B)  portIn(S)  portOut(Y)  NOT(S, nS)  NAND(A, nS, na)  NAND(B, S, nb)  NAND(na, nb, Y)}chip AND3 {  portIn(A)  portIn(B)  portIn(C)  portOut(Y)  AND(A, B, ab)  AND(ab, C, Y)}chip OR3 {  portIn(A)  portIn(B)  portIn(C)  portOut(Y)  OR(A, B, ab)  OR(ab, C, Y)}chip OR4 {  portIn(A)  portIn(B)  portIn(C)  portIn(D)  portOut(Y)  OR(A, B, ab)  OR(C, D, cd)  OR(ab, cd, Y)}chip OR8 {  portIn(A)  portIn(B)  portIn(C)  portIn(D)  portIn(E)  portIn(F)  portIn(G)  portIn(H)  portOut(Y)  OR4(A=A, B=B, C=C, D=D, Y=lo)  OR4(A=E, B=F, C=G, D=H, Y=hi)  OR(lo, hi, Y)}chip DEC8 {  portIn(I0)  portIn(I1)  portIn(I2)  portOut(Y0)  portOut(Y1)  portOut(Y2)  portOut(Y3)  portOut(Y4)  portOut(Y5)  portOut(Y6)  portOut(Y7)  NOT(I0, n0)  NOT(I1, n1)  NOT(I2, n2)  AND3(A=n2, B=n1, C=n0, Y=Y0)  AND3(A=n2, B=n1, C=I0, Y=Y1)  AND3(A=n2, B=I1, C=n0, Y=Y2)  AND3(A=n2, B=I1, C=I0, Y=Y3)  AND3(A=I2, B=n1, C=n0, Y=Y4)  AND3(A=I2, B=n1, C=I0, Y=Y5)  AND3(A=I2, B=I1, C=n0, Y=Y6)  AND3(A=I2, B=I1, C=I0, Y=Y7)} # ---------- питание, такт, сброс ----------power(VCC)ground(GND)clock(CLK)input(RST)NOT(RST, nR)# ---------- пульт кабины A ----------button{label="1"}(AB0)button{label="2"}(AB1)button{label="3"}(AB2)button{label="4"}(AB3)button{label="5"}(AB4)button{label="6"}(AB5)button{label="7"}(AB6)button{label="8"}(AB7)button{label="Отмена"}(ACAN)# ---------- кабина A ----------# где кабина: положение p4 p3 p2 = этаж, p1 p0 = шаг между этажами (0 — стоит ровно на этаже)NOR(p0, p1, atF)NOT(atF, natF)DEC8(I0=p2, I1=p3, I2=p4, Y0=y0, Y1=y1, Y2=y2, Y3=y3, Y4=y4, Y5=y5, Y6=y6, Y7=y7)# двери открыты, пока таймер t ≠ 0OR3(A=t0, B=t1, C=t2, Y=OPEN)NOT(OPEN, ndoor)# кабина на этаже f (рамка на экране) и «двери открыты на этаже f»AND(y0, atF, AC0)AND(AC0, OPEN, O0)AND(y1, atF, AC1)AND(AC1, OPEN, O1)AND(y2, atF, AC2)AND(AC2, OPEN, O2)AND(y3, atF, AC3)AND(AC3, OPEN, O3)AND(y4, atF, AC4)AND(AC4, OPEN, O4)AND(y5, atF, AC5)AND(AC5, OPEN, O5)AND(y6, atF, AC6)AND(AC6, OPEN, O6)AND(y7, atF, AC7)AND(AC7, OPEN, O7)# кнопки в кабине: защёлка K ставится нажатием, гаснет, пока на этом этаже открыты двери, кнопкой «Отмена» и сбросом;# пока гасится — нажатие не проходит (S и R вместе защёлке нельзя)OR(ACAN, RST, kc)OR(O0, kc, kr0)NOT(kr0, nkr0)AND(AB0, nkr0, ks0)SRLatch(S=ks0, R=kr0, Q=AK0)OR(O1, kc, kr1)NOT(kr1, nkr1)AND(AB1, nkr1, ks1)SRLatch(S=ks1, R=kr1, Q=AK1)OR(O2, kc, kr2)NOT(kr2, nkr2)AND(AB2, nkr2, ks2)SRLatch(S=ks2, R=kr2, Q=AK2)OR(O3, kc, kr3)NOT(kr3, nkr3)AND(AB3, nkr3, ks3)SRLatch(S=ks3, R=kr3, Q=AK3)OR(O4, kc, kr4)NOT(kr4, nkr4)AND(AB4, nkr4, ks4)SRLatch(S=ks4, R=kr4, Q=AK4)OR(O5, kc, kr5)NOT(kr5, nkr5)AND(AB5, nkr5, ks5)SRLatch(S=ks5, R=kr5, Q=AK5)OR(O6, kc, kr6)NOT(kr6, nkr6)AND(AB6, nkr6, ks6)SRLatch(S=ks6, R=kr6, Q=AK6)OR(O7, kc, kr7)NOT(kr7, nkr7)AND(AB7, nkr7, ks7)SRLatch(S=ks7, R=kr7, Q=AK7)# термометр: a_f = кабина ниже этажа f (a1 — это y0), b_f = кабина выше этажа f (b6 — это y7)OR(y0, y1, a2)OR(a2, y2, a3)OR(a3, y3, a4)OR(a4, y4, a5)OR(a5, y5, a6)OR(a6, y6, a7)OR(y7, y6, b5)OR(b5, y5, b4)OR(b4, y4, b3)OR(b3, y3, b2)OR(b2, y2, b1)OR(b1, y1, b0)# ВЫШЕ: есть заявка выше кабины; НИЖЕ: есть заявка нижеAND(AK1, y0, ru1)AND(AK2, a2, ru2)AND(AK3, a3, ru3)AND(AK4, a4, ru4)AND(AK5, a5, ru5)AND(AK6, a6, ru6)AND(AK7, a7, ru7)OR8(A=ru1, B=ru2, C=ru3, D=ru4, E=ru5, F=ru6, G=ru7, H=GND, Y=UPR)AND(AK0, b0, rd0)AND(AK1, b1, rd1)AND(AK2, b2, rd2)AND(AK3, b3, rd3)AND(AK4, b4, rd4)AND(AK5, b5, rd5)AND(AK6, y7, rd6)OR8(A=rd0, B=rd1, C=rd2, D=rd3, E=rd4, F=rd5, G=rd6, H=GND, Y=DNR)# кнопка в кабине на этом этажеAND(AK0, y0, hk0)AND(AK1, y1, hk1)AND(AK2, y2, hk2)AND(AK3, y3, hk3)AND(AK4, y4, hk4)AND(AK5, y5, hk5)AND(AK6, y6, hk6)AND(AK7, y7, hk7)OR8(A=hk0, B=hk1, C=hk2, D=hk3, E=hk4, F=hk5, G=hk6, H=hk7, Y=hK)NOT(dir, ndir)NOT(UPR, nUPR)OR(ndir, nUPR, gOK)# здесь: стоим на этаже, двери закрыты, есть заявка этого этажаAND3(A=atF, B=ndoor, C=hK, Y=here)# решение на этаже (двери закрыты, здесь не стоим): вверх — если есть выше и (едем вверх или ниже пусто), вниз — наоборотNOT(DNR, nDNR)OR(dir, nDNR, uOK)AND(UPR, uOK, mvUp)AND(DNR, gOK, mvDn)NOT(here, nhere)AND3(A=atF, B=ndoor, C=nhere, Y=decide)# направление: на этаже решаем заново (нет заявок — «вниз»), в пути и у дверей — держимMUX2(A=dir, B=mvUp, S=decide, Y=dirN)AND(dirN, nR, dirD)DFF(D=dirD, CLK=CLK, Q=dir)# ход: между этажами — всегда, на этаже — если решили ехатьOR(mvUp, mvDn, mv)AND(decide, mv, go1)OR(natF, go1, go)# счётчик положения: +1 вверх, −1 (= +11111) внизNOT(dirN, ndirN)AND(go, ndirN, dn)FA(A=p0, B=go, CI=GND, S=q0, CO=c0)FA(A=p1, B=dn, CI=c0, S=q1, CO=c1)FA(A=p2, B=dn, CI=c1, S=q2, CO=c2)FA(A=p3, B=dn, CI=c2, S=q3, CO=c3)FA(A=p4, B=dn, CI=c3, S=q4, CO=c4)AND(q0, nR, pd0)DFF(D=pd0, CLK=CLK, Q=p0)AND(q1, nR, pd1)DFF(D=pd1, CLK=CLK, Q=p1)AND(q2, nR, pd2)DFF(D=pd2, CLK=CLK, Q=p2)AND(q3, nR, pd3)DFF(D=pd3, CLK=CLK, Q=p3)AND(q4, nR, pd4)DFF(D=pd4, CLK=CLK, Q=p4)# таймер дверей: открылись — 4 (100), открыты — минус 1, закрыты — 0FA(A=t0, B=VCC, CI=GND, S=u0, CO=e0)FA(A=t1, B=VCC, CI=e0, S=u1, CO=e1)FA(A=t2, B=VCC, CI=e1, S=u2, CO=e2)AND(u0, OPEN, v0)AND(u1, OPEN, v1)AND(u2, OPEN, v2a)OR(v2a, here, v2)AND(v0, nR, td0)DFF(D=td0, CLK=CLK, Q=t0)AND(v1, nR, td1)DFF(D=td1, CLK=CLK, Q=t1)AND(v2, nR, td2)DFF(D=td2, CLK=CLK, Q=t2)# есть заявки; стрелки — направление, пока есть заявки или едемOR8(A=AK0, B=AK1, C=AK2, D=AK3, E=AK4, F=AK5, G=AK6, H=AK7, Y=rAny)OR(rAny, natF, busy)AND(dir, busy, AUP)AND(ndir, busy, ADN)# экран: створки (двери закрыты), в пути между f и f+1, цифра этажаAND(AC0, ndoor, AD0)AND(AC1, ndoor, AD1)AND(AC2, ndoor, AD2)AND(AC3, ndoor, AD3)AND(AC4, ndoor, AD4)AND(AC5, ndoor, AD5)AND(AC6, ndoor, AD6)AND(AC7, ndoor, AD7)AND(y0, natF, AM0)AND(y1, natF, AM1)AND(y2, natF, AM2)AND(y3, natF, AM3)AND(y4, natF, AM4)AND(y5, natF, AM5)AND(y6, natF, AM6)OR8(A=y1, B=y2, C=y4, D=y5, E=y6, F=y7, G=GND, H=GND, Y=AFa)OR8(A=y0, B=y1, C=y2, D=y3, E=y6, F=y7, G=GND, H=GND, Y=AFb)OR8(A=y0, B=y2, C=y3, D=y4, E=y5, F=y6, G=y7, H=GND, Y=AFc)OR8(A=y1, B=y2, C=y4, D=y5, E=y7, F=GND, G=GND, H=GND, Y=AFd)OR3(A=y1, B=y5, C=y7, Y=AFe)OR4(A=y3, B=y4, C=y5, D=y7, Y=AFf)OR8(A=y1, B=y2, C=y3, D=y4, E=y5, F=y7, G=GND, H=GND, Y=AFg)# ---------- гонг: двери открываются ----------speaker{mode="buzz", tone=880}(here)

Не получается? Что-то не работает →