Функция playTone зуммера
Я делаю игру "Саймон говорит", используя Arduino на TinkerCad. Я столкнулся с проблемой в звуковой функции зуммера. Я хочу что-то вроде этого:
Выполните следующие действия, чтобы сгенерировать звуковой сигнал для красного светодиода: Воспроизведение 440 Гц в течение 150 мс Ждите 1136us Воспроизведение 440 Гц в течение 150 мс
Выполните следующие действия, чтобы сгенерировать тон для желтого светодиода: Воспроизведение 784 Гц в течение 150 мс Ждите 638us Воспроизведение 784 Гц в течение 150 мс
Выполните следующие действия, чтобы сгенерировать тон для синего светодиода: Воспроизведение 587 Гц в течение 150 мс Ждите 851us Воспроизведение 587 Гц в течение 150 мс
Выполните следующие действия, чтобы сгенерировать звуковой сигнал для зеленого светодиода: Воспроизведение 880 Гц в течение 150 мс Ждите 568us Воспроизведение 880 Гц в течение 150 мс
У меня есть следующие функции для вышеперечисленного:
void playTone2(int tone, int duration) {
Serial.println(tone);
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWriteGeneric(buzzer, true);
delayMicroseconds(tone);
digitalWriteGeneric(buzzer, false);
delayMicroseconds(tone);
}
}
void playTone(int tone1) {
Serial.println(tone1);
if (tone1 == 440) {
playTone2(440, 150);
delayMicroseconds(1136);
playTone2(440, 150);
}
if (tone1 == 784) {
playTone2(784, 150);
delayMicroseconds(638);
playTone2(784, 150);
}
if (tone1 == 587) {
playTone2(587, 150);
delayMicroseconds(851);
playTone2(587, 150);
}
if (tone1 == 880) {
playTone2(880, 150);
delayMicroseconds(568);
playTone2(880, 150);
}
if (tone1 == 2700) {
playTone2(250, 250);
delay(250);
playTone2(150, 250);
}
}
Сначала был только код playTone, но мне нужны были разные значения для разных светодиодов, поэтому я включил функцию playTone и вызвал playTone2. Но тоны, которые я получаю, не точны, возможно, из-за двух функций. Я смогу решить эту проблему, если смогу понять работу функции playTone2. Я пробовал, но бесполезно, пожалуйста, поделитесь, как именно playtone2 функционирует здесь, чтобы я мог соответствующим образом отредактировать свою функцию playTone.
@Snoke, 👍1
Обсуждение1 ответ
Лучший ответ:
Вот простой скетч для проверки тонов, используемых для каждого цвета светодиода. Я не тестировал его с динамиком, но он компилируется в Arduino IDE, так что, возможно, он будет работать как есть.
Вызов delayMicroseconds()
является "блокирующим" кодом, поэтому вы можете изменить его, чтобы использовать "неблокирующий" код, например, использовать пример BlinkWithoutDelay в IDE для создания
таймера на основе micros ().
/* Arduino Uno. IDE 1.8.9
Sketch uses 2540 bytes (7%) of program storage space.
Global variables use 28 bytes (1%) of dynamic memory.
red LED: Play 440 Hz for 150ms Wait for 1136us Play 440 Hz for 150ms
yellow LED: Play 784 Hz for 150ms Wait for 638us Play 784 Hz for 150ms
blue LED: Play 587 Hz for 150ms Wait for 851us Play 587 Hz for 150ms
green LED: Play 880 Hz for 150ms Wait for 568us Play 880 Hz for 150ms
*/
byte tonePin = 8;
void setup(){
pinMode(tonePin, OUTPUT);
RedLEDSound();
YellowLEDSound();
BlueLEDSound();
GreenLEDSound();
}
void loop(){}
void PlayTone(unsigned int m_frequency, unsigned long m_duration, unsigned long m_pause){
tone(tonePin, m_frequency, m_duration);
delayMicroseconds(m_pause);
noTone(tonePin);
}
void RedLEDSound(){
PlayTone(440, 150, 1136);
PlayTone(440, 150, 0);
}
void YellowLEDSound(){
PlayTone(784, 150, 638);
PlayTone(784, 150, 0);
}
void BlueLEDSound(){
PlayTone(587, 150, 851);
PlayTone(587, 150, 0);
}
void GreenLEDSound(){
PlayTone(880, 150, 568);
PlayTone(880, 150, 0);
}
- Цепь с зуммером не работает
- Пассивный зуммер работает с AnalogWrite(), но не с DigitalWrite(). Он также имеет постоянный статический шум.
- Ток потребления зуммера
- Почему пассивный зуммер щелкает, а не гудит, когда установлен на ВЫСОКИЙ?
- Можем ли мы генерировать тон 20 кГц с обычным зуммером в arduino?
- Не выходит из цикла for
- Как можно иметь два мигающих светодиода и один гаснущий?
- Есть ли способ для клавиатуры остановить зуммер во время его работы?
в чем конкретно проблема? ... все, что вы сказали, - это "проблема" и "неточно", ни одно из которых не описывает реальную проблему, @jsotola
Проблема в том, что звук зуммера с этими функциями не точен, задержка больше, чем ожидалось., @Snoke
вы уже сказали "неточно"., @jsotola
пожалуйста, запустите простой скетч, который воспроизводит масштаб, @jsotola