@Alex_512

Как заставить несколько пьезопищалок пищать одновременно?

Доброго времени суток, товарищи.

Возникла необходимость подключить две пьезопищалки, которые должны пищать по определенному событию. Проблема в том, что метод tone(), который генерирует звуковую волну, не может в один момент времени заставлять пищать несколько пищалок. Пробовал, используя библиотеку ArduinoThread, реализовать многопоточность, но не получилось. Вот этот пример soltau.ru/index.php/arduino/item/373-kak-vypolnyat...

Кто - нибудь сталкивался с подобной проблемой? Как генерировать звуковую волну без метода tone()?
  • Вопрос задан
  • 463 просмотра
Решения вопроса 1
Tone делает меандр определенной частоты.

Самый тупой метод, написать функцию, которая будет переключать пин через равные промежутки времени.
Допустим нам нужна частота f = 3кГц. Период равен T = 1/f с.
Переключая пин каждые t = T/2 секунды получим наш меандр на 3кГц.
Только надо будет время в мкс перегнать.
f = 3000;
T = 1000000/f;//период в мкс
t = T/2; //время полупериода
Могу накосячить в коде:
Берем остаток от деления таймера микросекунд на период.
Если остаток больше, чем полупериод, то одно состояние (высокое), иначе другое(низкое).
Но эту строку надо будет вызывать постоянно.

if((micros() % T) > t) digitalWrite(BUZZ1, HIGH);
else digitalWrite(BUZZ1, LOW);

Более лучший вариант делать это по прерываниям от одного из таймеров.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
a_volkov1987
@a_volkov1987
Инженер-схемотехник
А почему не пойти по пути наименьшего сопротивления и не купить пищалки со встроенным генератором? Разница в цене невелика, зато управлять проще и ресурсы мк на писк тратить не надо. Или вам критично, чтоб можно было мелодию отыграть на пищалках?
Ответ написан
Sly_tom_cat
@Sly_tom_cat
.
А мне непонятно - если они пищат одновременно, то почему их на один выход не повесить с элементарным усилителем на любом транзисторе?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы