Как пищать пьезо-зуммером на Arduino через tone()?
Есть маленькая пьезо-пищалка (зуммер). Хочу, чтобы Arduino издавала звуки — например, пикала при срабатывании датчика. Как заставить её звучать? Через digitalWrite вроде только тихо щёлкает.
2 ответа
Для звука есть специальная функция tone(), которая генерирует нужную частоту. Подключи пьезо-зуммер: один вывод на цифровой пин (например 8), второй — на GND (часто через резистор 100 Ом).
void setup() {
// ничего особого не нужно
}
void loop() {
tone(8, 1000); // звук 1000 Гц на пине 8
delay(500);
noTone(8); // тишина
delay(500);
}
tone(pin, частота) — частота в герцах, чем больше — тем выше писк. noTone(pin) выключает звук.
Можно сыграть мелодию, подавая разные частоты подряд:
tone(8, 262); delay(300); // до
tone(8, 294); delay(300); // ре
tone(8, 330); delay(300); // ми
noTone(8);
Важно: tone() мешает ШИМ на пинах 3 и 11 (на Uno), так что зуммер на них с analogWrite не подружится.
Учти, что бывают «активные» и «пассивные» зуммеры. Активный пищит сам, как только подашь питание (digitalWrite HIGH), и менять тон у него нельзя. А tone() нужен именно для пассивного зуммера. Если код с tone() даёт только монотонный писк — у тебя, скорее всего, активный.