Skip to content

Instantly share code, notes, and snippets.

@dromanov
Created March 14, 2025 06:18
Show Gist options
  • Save dromanov/b62537470d0125856a03c72828c0ac9e to your computer and use it in GitHub Desktop.
Save dromanov/b62537470d0125856a03c72828c0ac9e to your computer and use it in GitHub Desktop.

Привет, друзья!

Это сухой остаток работы на образовательной площадке фестиваля "РобоФест-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 <=> ребру графа
  • рёбра пишутся в любом порядке <=> ==исчезает необходимость в дереве/сложном коде с нелинейным порядком выполнения==
  • рёбра дорабатываются мгновенно
  • при написании кода голова держит только исходящие рёбра => это тоже стратегия "разделяй и властвуй"
@dromanov
Copy link
Author

Мои контакты, забыл добавить: https://vk.com/d_v_romanov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment