# 🔊 Пассивный бузер

Пассивный бузер — это звуковой излучатель без встроенного генератора: сам по себе он
молчит, даже если подать на него постоянное напряжение. Чтобы он зазвучал, нужно подать
на управляющий вывод переменный сигнал нужной частоты — за это отвечает функция Arduino
Core `tone(pin, frequency)`. Этим он отличается от *активного* бузера, которому для звука
достаточно простого `digitalWrite()`; подробнее — в [THEORY.md](THEORY.md).

Раз частоту можно менять, пассивный бузер умеет больше, чем один фиксированный тон:
сирена из двух чередующихся частот, писки на разной высоте и т.д.

## 📋 Навигация

| Файл | Что внутри |
| :--- | :--- |
| [WIRING.md](WIRING.md) | Схема подключения через транзистор/MOSFET |
| [THEORY.md](THEORY.md) | Физика звука, функция `tone()`, разбор паттернов |
| [PREZ.md](PREZ.md) | Презентация модуля — 5 тезисов для урока |

## 🛠 Состав компонента

- [`include/PassiveBuzzer.h`](include/PassiveBuzzer.h) — интерфейс класса драйвера.
- [`src/PassiveBuzzer.cpp`](src/PassiveBuzzer.cpp) — машина состояний неблокирующих сигналов.
- [`src/main.cpp`](src/main.cpp) — тестовый стенд с управлением по Serial.

Почти весь API неблокирующий (`turnOn()`, `playSiren()`, `playBeepTriple()`) — сигнал
играет, пока `loop()` продолжает опрашивать датчики. Исключение — `beepBlocking()`:
она намеренно блокирующая и предназначена только для короткого сигнала на старте
программы (когда ещё нечему мешать), не для использования во время основной работы.

## 🚀 Сборка и прошивка (PlatformIO)

```bash
cd Components/PassiveBuzzer
pio run -t upload && pio device monitor
```

По умолчанию используется `GPIO 15` (см. `BUZZER_PIN` в [main.cpp](src/main.cpp)) —
поменяйте на свой пин при необходимости.

### Команды тестового стенда
- `1` — короткий писк 2000 Гц, 100 мс (блокирующий, `beepBlocking`)
- `2` — непрерывный тон 1500 Гц
- `3` — паттерн `Siren` (сирена)
- `4` — паттерн `BeepTriple` (три коротких писка)
- `0` — выключить всё
