все работает независимо, но не вместе. Пьезо не генерирует тон
Моя цель с кодом проста. Пусть пьезо издает звук, когда температура достигает 25 градусов. Мой пьезо подключен правильно, потому что он издает звук, когда загружается ардуино или когда я помещаю эту строку кода в любое другое место в моем коде.
Я также проверил, был ли вызван оператор If. И да, он был вызван! То есть оператор if выполняется, но я не слышу жужжания.
Я знаю, что я ломаю свой семисегментный экран, используя задержку. Но я не против того, чтобы экран работал, когда зуммер.
void loop()
{
//локальные переменные
if (millis() % 5000 <= 10) {
float lm35TempC = lm35.getTempC();
sevseg.setNumber(lm35TempC, 2);
if (lm35TempC > 25.00) {
tone(1,500,1000);
delay(3000); <------- WHERE IT PROBABLY GOES WRONG
}
if (lm35TempC < 25.00) {
noTone(1);
}
}
sevseg.refreshDisplay(); // Должен запускаться многократно; не используйте блокирующий код (например: delay()) в функции loop(), иначе это не будет работать правильно
}
В заключение: оператор If работает, но я не слышу гудка. Как это происходит?
Заранее спасибо!
1 ответ
Лучший ответ:
Вы подключили пьезо к контакту 1? Выберите другой контакт. Контакт 1 — это последовательный TX. Вы «перекачиваете» ШИМ в USB.
Функция tone() издаст звук независимо от того, есть ли у вас задержка. Вы устанавливаете 1 секунду с 1000 в качестве третьего параметра. Она будет звучать 1 секунду и затем выключаться. Вам не нужны delay() и noTone().
500 — это низкая частота. Если это звучит всего одну секунду, вы можете это уловить?
попробуйте tone(TONE_PIN, 4500, 500)
. с динамиком это приятный писк
Вы были правы! Единственная причина, по которой я использовал пин 1, заключалась в том, что я уже использовал все остальные цифровые пины (кроме 0, но этот похож на 1). Теперь я настроил аналоговый пин как выход, и он работает идеально!, @Anton van der Wel
- Пассивный зуммер работает с AnalogWrite(), но не с DigitalWrite(). Он также имеет постоянный статический шум.
- Не выходит из цикла for
- Цепь с зуммером не работает
- Ток потребления зуммера
- Почему пассивный зуммер щелкает, а не гудит, когда установлен на ВЫСОКИЙ?
- Как включить и выключить зуммер
- Пьезозвук мелодия ардуино для автосигнализации
- Плохое качество звука при использовании пьезоэлемента в TinkerCad
Окна
millis() % 5000 <= 10
составляют всего 10 мс каждые 5 секунд. Сколько времени занимает функцияsevseg.refreshDisplay
? более 10 мс?, @JotНет, я не думаю, что эта функция займет намного больше времени, но я должен признать, что это некрасивый способ создания задержки в 5 секунд, но если я, например, увеличу 10 до 50, мой дисплей иногда будет обновляться дважды в течение короткого периода времени., @Anton van der Wel
Тогда прекратите делать это некрасиво. Используйте https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay с интервалом в 5 секунд. После этого вам нужно исправить тон, я думаю, что это тоже некрасиво. Тон с длительностью задержится и не нуждается в noTone. Также могут быть проблемы с оборудованием. Исправьте все по одному., @Jot