Skip to main content

Конечные автоматы и временные циклы

ЗАЧЕМ ЭТО НУЖНО? 🎯

Суть проблемы: большинство начинающих программируют роботов по принципу “что вижу - то и делаю”, что приводит к хаотичному поведению и трудноотлаживаемому коду.

Решение: Конечные автоматы (state machines) - это карта поведения устройства, где:

  • Четко определены состояния (красный, желтый, зеленый)
  • Прописаны переходы между ними (по времени/событиям)
  • Указаны действия в каждом состоянии

Олимпиадная ценность: 90% заданий требуют реализации многорежимных систем с четкими переходами!


КАК ИЗУЧАЕМ? 🚀

Без кода - только логика:

Пример: Дверь-автомат
Состояния: [ЗАКРЫТО] → (кнопка нажата) → [ОТКРЫВАЕТСЯ] → (5 сек) → [ОТКРЫТО] 
         → (10 сек) → [ЗАКРЫВАЕТСЯ] → (5 сек) → [ЗАКРЫТО]

Методика обучения:

  1. “Живые автоматы” - дети становятся роботами и выполняют переходы
  2. Рисуем графы состояний на доске цветными маркерами
  3. Составляем таблицы переходов - от события к новому состоянию
  4. Находим автоматы в жизни - лифт, стиральная машина, светофор

Временные циклы вместо delay():

// НЕПРАВИЛЬНО - робот "засыпает"
delay(5000);
digitalWrite(red, LOW);

// ПРАВИЛЬНО - робот активен в ожидании
if (millis() - lastChange > 5000) {
  digitalWrite(red, LOW);
  lastChange = millis();
}

Результат: Ученики начинают мыслить категориями “в каком состоянии система?” вместо “что делать сейчас?”