首页 > 解决方案 > 在蜂鸣器上演奏和弦,ESP32 Arduino

问题描述

我想使用 esp32 在蜂鸣器上同时播放两个频率(522 和 660)。

我尝试了这些不同的方法:

void loop()
{
  unsigned long t = micros();
  if(t % 261 <= 10) //for approximation
  {
     firstWave = !firstWave;
  }
  if(t % 330 <= 10)
  {
     secondWave = !secondWave;
  }
  if(firstWave && secondWave)
  {
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13, LOW);
  }
}

这导致完全没有声音。然后我尝试用 FreeRTOS 强制它而不用想太多......

void secondWave(void* p)
{
  while(true)
  {
    delayMicroseconds(330);
    digitalWrite(13, HIGH);
    delayMicroseconds(330);
    digitalWrite(13, LOW);
  } 
  return;
}
void setup()
{
  xTaskCreate(secondWave, "wave", 10000, NULL, 1, NULL);
}
void loop()
{
    delayMicroseconds(261);
    digitalWrite(13, HIGH);
    delayMicroseconds(261);
    digitalWrite(13, LOW);
}

这没有用......但是谁是看门狗,为什么他会被触发。

我不想再买第二个蜂鸣器。我不想买不同的卡。

请帮忙,谢谢

标签: arduinoesp32pwm

解决方案


仅使用一个蜂鸣器几乎不可能实现您想要做的事情。

蜂鸣器通过以特定频率振动金属板来工作。压电蜂鸣器一次只能播放一个频率。我知道您不想再购买一个蜂鸣器,但这意味着您一次只能播放一个音符

如果你想演奏一个和弦,你甚至可能需要三个。您可以做的是尝试制作扬声器或回收扬声器。这些通常可以一次播放多个频率。

这是制作扬声器的一种粗略但很好的方法:指南

对于这个坏消息,我深表歉意,我希望这对您有用 - 祝您有美好的一天!


推荐阅读