уровень 5 · практика
ЖД переезд
Железнодорожный путь идёт поперёк экрана, автодорога пересекает его сверху вниз — рельсы уложены поверх асфальта. С обеих сторон переезда стоят шлагбаум и светофор. Поезд идёт сам и не тормозит; ваша программа должна вовремя закрыть переезд и открыть его после прохода.
Чем управляете
| Вывод | Что это |
|---|---|
| D2 | SB1, датчик приближения — ВХОД. HIGH, пока поезд в зоне подхода. От срабатывания до переезда около 8 секунд — успеть закрыть переезд надо в этот запас. |
| D3 | SB2, датчик проезда — ВХОД. HIGH, когда поезд уже за переездом. |
| D9 | Привод шлагбаумов, ШИМ: analogWrite(9, 0) — стрелы подняты, analogWrite(9, 255) — опущены. Промежуточные значения дают промежуточный угол, поэтому стрелу можно опускать плавно. |
| D11 / D12 | Красные огни светофора. Мигают попеременно: горит то один, то другой. |
| D13 | Зелёный сигнал: переезд открыт, можно ехать. |
Порядок закрытия
- Сработал SB1 — гасим зелёный и включаем мигалку.
- Через пару секунд опускаем шлагбаум: водители успевают освободить переезд.
- Поезд проходит.
- Сработал SB2 — поднимаем шлагбаумы, гасим мигалку и снова зажигаем зелёный.
Обе стрелы и оба светофора работают от одних и тех же выводов: на живом переезде стороны показывают одно и то же. Машина, уже въехавшая на пути, всегда их освобождает — подставить её сценарием нельзя. Авария бывает только если переезд не закрыт вовремя.
Что проверяется
- Закрытие по датчику, а не по таймеру.
- Мигалка раньше шлагбаума.
- Ни одной машины на путях в момент прохода.
- Открытие после SB2.
- Простой не дольше 20 секунд — дорогу нельзя держать закрытой «на всякий случай».