Карта ячеек и почему её задают руками
Карта ячеек — это список: какая дверца шкафа к какому гнезду платы п одключена. Например: «ячейка 1 — гнездо CH01, ячейка 2 — гнездо CH07». Без этого списка программа не знает, что открывать, когда клиент вводит код.
Почему её нельзя определить автоматически
Разумный вопрос: пусть программа опросит все 27 гнёзд и сама поймёт, где есть замки. Так не получится, и вот почему.
На запрос «что у тебя на гнезде номер 5?» плата отвечает одним из двух:
| Ответ платы | Что он значит |
|---|---|
| «нажат» | дверца закрыта. Значит замок и датчик здесь точно есть |
| «отпущен» | либо дверца открыта, либо на этом гнезде вообще ничего нет |
Второй ответ приходит байт в байт одинаковым в обоих случаях. Плата сообщает, что у неё на входе, и не знает, подключено к нему что-нибудь или нет. Различить это опросом невозможно — не «трудно», а невозможно в принципе.
Значит, если бы программа строила карту по опросу, распахнутая дверца выглядела бы как отсутствующая ячейка, а пустое гнездо — как открытая ячейка. Клиента отправили бы к дверце, которой нет.
Если гнездо хоть раз ответило «нажат», значит на нём точно есть живой замок с датчиком: пустое гнездо так ответить не может никогда.
Обратное неверно: сколько бы раз мы ни услышали «отпущен», это не доказывает, что гнездо пустое.
На этом одностороннем доказательстве и построен мастер привязки.