tone() and noTone()

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Мужики, подскажите в чем косяк... Походу я чего-то недопонял... Вот такой код для теста написал:

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);


}

Проблема: после посылки любого символа в сЕриал пищалка начинает пищать, но не затыкается... Что я упустил?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Andrey-S, условие срабатывает на каждом круге loop, Вы же из буффера функции не забрали байт.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А как только заберёте байт, она начнёт щелкать и замолкать и даже не подумает хоть немного попищать.

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Я так понимаю, что между 11 и 12 строкой мне надо вставить что-то типа "char ch=Serial.read();"??? Если да, то эффекта ноль.. Даже следом дописал "Serial.flush();" Опять ноль... Или опять туплю?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Опять :)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013
if (Serial.available())    { //если че-то пришло
    Serial.read();
    tone(sound, 200); // пищим с частотой 200гц
    delay(500);
    flag=1; 
     }

if (flag==1) {noTone(sound);  flag=0;   }
}

 

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Ладно... Изменил код на следующий:

int sound=22;

void setup() {
  // put your setup code here, to run once:
Serial.begin(19200);
}

void loop() {
  // put your main code here, to run repeatedly:
if (Serial.available()){

 char ch=Serial.read();
 if (ch=='1') tone(sound, 200);
 if (ch=='2') noTone(sound);
}




}

Жму 1... Начинает пищать....Жму 2... Продолжает пищать НО с другой частотой... WTF???   P.S. Использую монтажный модуль пьезодинамика, а не просто пьезодинамик (если это конечно важно)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dimax, Вы попали!

Andrey-S
Offline
Зарегистрирован: 02.01.2015

dimax пишет:

if (Serial.available())    { //если че-то пришло
    Serial.read();
    tone(sound, 200); // пищим с частотой 200гц
    delay(500);
    flag=1; 
     }

if (flag==1) {noTone(sound);  flag=0;   }
}

 

Этот код пищит вначале пол секунды одной частотой а потом незатыкаясь другой... Видимо функция noTone() не глушит нифига... а почемуууу.....

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Andrey-S, что за динамик у вас? Вероятность что функция не работает -ниже чем вероятность что вы неправильно включили динамик )) PS такое может быть если у вас димнамик с пищалкой, и включаете вы его относительно плюсовой шины. Пока функция не проинициализирована - на пине Z состояние. Когда звук отыграл пин остаётся как выход.

Andrey-S
Offline
Зарегистрирован: 02.01.2015

dimax пишет:

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     Подключить его неправильно как-то сложновато если честно... Переключил этот модуль на НАНО с соответствуюими изменениями пина в коде... Все то же самое... Получается модуль неисправен чели?

vvadim
Offline
Зарегистрирован: 23.05.2012
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Andrey-S пишет:

dimax пишет:

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

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Valera19701, но а как же тогда менять частоту без функции tone()? Может мне выпаять просто сам пьезоэлемент оттуда и напрямую врубить?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Andrey-S, во первых тут не корректно применять слово "пьезо", это обычный электромагнитный излучатель. Генератор звук.частоты в нём встроен. С функцией tone() он никак не совместим. Покупайте другой.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Andrey-S пишет:

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Andrey-S пишет:

Динамик такой примерно 

Блин, ну, вот нельзя отвечать новичку пока он не приведёт точное оборудование, схему включения и скетч! Нельзя - потреря времени!

Мало ли что китаец написал, что он passive? Вы + на корпусе видите?

Это активный зуммер. Если подать на него питание, он заверищит. Средняя нога для включения и для громкости через ШИМ. Попробуйте подключить его к GND, +5, а среднюю ногу к какому-нибудь ШИМ-порту и поподавайте на этот порт шим разной скважности. Наверняка, громкость будет меняться. 

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Вот уж не знал, что эти пищалки делятся еще на всяки-разные... СПАСИБО ВСЕМ БОЛЬШОЕ за объяснение... Этот просто реагировал на смену частот вот я грешным делом и подумал, что "а почему бы и нет?"... Оказалось - показалось... Буду кормить тогда его просто единицами и нулями)