tone() and noTone()
- Войдите на сайт для отправки комментариев
Втр, 20/09/2016 - 14:58
Мужики, подскажите в чем косяк... Походу я чего-то недопонял... Вот такой код для теста написал:
int sound=22;//пин пищалки на МЕГЕ int flag=0; void setup() { Serial.begin(19200); } void loop() { if (Serial.available()) { //если че-то пришло tone(sound, 200); // пищим с частотой 200гц flag=1; } if (flag==1) noTone(sound); }
Проблема: после посылки любого символа в сЕриал пищалка начинает пищать, но не затыкается... Что я упустил?
Andrey-S, условие срабатывает на каждом круге loop, Вы же из буффера функции не забрали байт.
А как только заберёте байт, она начнёт щелкать и замолкать и даже не подумает хоть немного попищать.
Я так понимаю, что между 11 и 12 строкой мне надо вставить что-то типа "char ch=Serial.read();"??? Если да, то эффекта ноль.. Даже следом дописал "Serial.flush();" Опять ноль... Или опять туплю?
Опять :)
Ладно... Изменил код на следующий:
Жму 1... Начинает пищать....Жму 2... Продолжает пищать НО с другой частотой... WTF??? P.S. Использую монтажный модуль пьезодинамика, а не просто пьезодинамик (если это конечно важно)
dimax, Вы попали!
Этот код пищит вначале пол секунды одной частотой а потом незатыкаясь другой... Видимо функция noTone() не глушит нифига... а почемуууу.....
Andrey-S, что за динамик у вас? Вероятность что функция не работает -ниже чем вероятность что вы неправильно включили динамик )) PS такое может быть если у вас димнамик с пищалкой, и включаете вы его относительно плюсовой шины. Пока функция не проинициализирована - на пине Z состояние. Когда звук отыграл пин остаётся как выход.
Andrey-S, что за динамик у вас? Вероятность что функция не работает -ниже чем вероятность что вы неправильно включили динамик )) PS такое может быть если у вас димнамик с пищалкой, и включаете вы его относительно плюсовой шины. Пока функция не проинициализирована - на пине Z состояние. Когда звук отыграл пин остаётся как выход.
Динамик такой примерно https://ru.aliexpress.com/item/Freeshipping-1pcs-Passive-Buzzer-Module-for-Arduino-NEW-IN-STOCK/32563754964.html?spm=2114.03010208.3.12.9JHBKs&ws_ab_test=searchweb201556_0,searchweb201602_1_10065_10068_112_10069_110_111_418_10017_109_108_10060_10061_10062_10057_10039_10056_10055_10037_10054_301_10033_10059_10032_10058_10073_10070_10052_10053_10050_10051,searchweb201603_4&btsid=d51eaf4f-d4ad-4ed0-a227-df0dc0a47c59 Подключить его неправильно как-то сложновато если честно... Переключил этот модуль на НАНО с соответствуюими изменениями пина в коде... Все то же самое... Получается модуль неисправен чели?
попробуйте так
http://www.instructables.com/id/Arduino-YL-44-Buzzer-module/?ALLSTEPS
Andrey-S, что за динамик у вас? Вероятность что функция не работает -ниже чем вероятность что вы неправильно включили динамик )) PS такое может быть если у вас димнамик с пищалкой, и включаете вы его относительно плюсовой шины. Пока функция не проинициализирована - на пине Z состояние. Когда звук отыграл пин остаётся как выход.
Динамик такой примерно https://ru.aliexpress.com/item/Freeshipping-1pcs-Passive-Buzzer-Module-for-Arduino-NEW-IN-STOCK/32563754964.html?spm=2114.03010208.3.12.9JHBKs&ws_ab_test=searchweb201556_0,searchweb201602_1_10065_10068_112_10069_110_111_418_10017_109_108_10060_10061_10062_10057_10039_10056_10055_10037_10054_301_10033_10059_10032_10058_10073_10070_10052_10053_10050_10051,searchweb201603_4&btsid=d51eaf4f-d4ad-4ed0-a227-df0dc0a47c59 Подключить его неправильно как-то сложновато если честно... Переключил этот модуль на НАНО с соответствуюими изменениями пина в коде... Все то же самое... Получается модуль неисправен чели?
это активный зумер, ему не нужна функция TONE, он работает от 0 или 1
Valera19701, но а как же тогда менять частоту без функции tone()? Может мне выпаять просто сам пьезоэлемент оттуда и напрямую врубить?
Andrey-S, во первых тут не корректно применять слово "пьезо", это обычный электромагнитный излучатель. Генератор звук.частоты в нём встроен. С функцией tone() он никак не совместим. Покупайте другой.
Valera19701, но а как же тогда менять частоту без функции tone()? Может мне выпаять просто сам пьезоэлемент оттуда и напрямую врубить?
не получится, у него внутри генератор, вам надо пассивный зумер, можно с компа спереть
или
http://ru.aliexpress.com/item/5PCS-Lot-Passive-Buzzer-AC-12MM-8-5MM-12085-16R-Resistance-3V-5V-9V-12V-In/32503620431.html?spm=2114.30010708.3.45.82zSA6&ws_ab_test=searchweb201556_0,searchweb201602_4_10065_10068_10069_418_10017_10060_10061_10062_10057_10039_10056_10055_10037_10054_301_10033_10059_10032_10058_10073_10070_10052_10053_10050_10051,searchweb201603_2&btsid=de5d08b0-3a6d-45c4-98e7-b5e4b14d4a6d
Динамик такой примерно
Блин, ну, вот нельзя отвечать новичку пока он не приведёт точное оборудование, схему включения и скетч! Нельзя - потреря времени!
Мало ли что китаец написал, что он passive? Вы + на корпусе видите?
Это активный зуммер. Если подать на него питание, он заверищит. Средняя нога для включения и для громкости через ШИМ. Попробуйте подключить его к GND, +5, а среднюю ногу к какому-нибудь ШИМ-порту и поподавайте на этот порт шим разной скважности. Наверняка, громкость будет меняться.
Вот уж не знал, что эти пищалки делятся еще на всяки-разные... СПАСИБО ВСЕМ БОЛЬШОЕ за объяснение... Этот просто реагировал на смену частот вот я грешным делом и подумал, что "а почему бы и нет?"... Оказалось - показалось... Буду кормить тогда его просто единицами и нулями)