Привет, друзья!
Это сухой остаток работы на образовательной площадке фестиваля "РобоФест-2025", лицей №6 "Перспектива".
С чего мы начали: берём простой светофор на ардуино (на всякий случай: техника не зависит от изделия или языка программирования). Скетч доступен по ссылке: https://wokwi.com/projects/425370735110023169
Задача: добавить кнопку, которая будет переключать светофор на зелёный свет. Кнопку добавить очень легко - мы подключили кнопку и проверили её работоспособность тут: https://wokwi.com/projects/425372924101818369
Основная сложность - пока работает delay, плата игнорирует нажатие кнопки вообще. Это - ключевая сложность нашей задачи.
Её можно обойти грязным хаком: https://wokwi.com/projects/425375268195862529
Есть индустриальная техника, новая парадигма, новый способ разделить исходную сложность на части. До этого вы, наверное, знали два способа делить задачу на подзадачи: процедурное программирование и объектнориентированное программирование.
Сегодня мы узнали новый: в функционирующем изделии выделяются состояния и переходы между ними. Состояние теперь сохраняется явно, а граф переходов (его ещё называют конечный автомат) очень просто отображается на код.
Светофор на КА: https://wokwi.com/projects/425375868319080449
- чёткое деление на обработку состояний в шапке
- перевод устройства в физическое состояние
- граф состояний однозначно отображается на код:
if (state == S1 && event_for_S1) { state = S2; // запоминаем необходую информацию для состояния `S2` }
- каждый
if
<=> ребру графа - рёбра пишутся в любом порядке <=> ==исчезает необходимость в дереве/сложном коде с нелинейным порядком выполнения==
- рёбра дорабатываются мгновенно
- при написании кода голова держит только исходящие рёбра => это тоже стратегия "разделяй и властвуй"
Мои контакты, забыл добавить: https://vk.com/d_v_romanov