arduino - 在蜂鸣器上演奏和弦,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);
}
这没有用......但是谁是看门狗,为什么他会被触发。
我不想再买第二个蜂鸣器。我不想买不同的卡。
请帮忙,谢谢
解决方案
仅使用一个蜂鸣器几乎不可能实现您想要做的事情。
蜂鸣器通过以特定频率振动金属板来工作。压电蜂鸣器一次只能播放一个频率。我知道您不想再购买一个蜂鸣器,但这意味着您一次只能播放一个音符
如果你想演奏一个和弦,你甚至可能需要三个。您可以做的是尝试制作扬声器或回收扬声器。这些通常可以一次播放多个频率。
这是制作扬声器的一种粗略但很好的方法:指南
对于这个坏消息,我深表歉意,我希望这对您有用 - 祝您有美好的一天!
推荐阅读
- python - 为什么 python 的 __repr__ 的 dict 比它的 __str__ 更具可读性?
- javascript - 解析 http://localhost:8000/src/client/assets/data.json 期间的 Http 失败
- python-3.x - 如何使用 python 数据框的列查询 Dynamodb?
- sql - 从字符串转换日期和/或时间时转换失败(返回月份的最后一天)
- php - 如何在下一页显示输入信息?
- c# - 动态返回模型的值
- selenium - 顺序谓词和组合谓词之间的区别
- c - 检查数组是否为 ASCII
- angular - Angular 6:组件内的表单,单击提交按钮时未触发ngSubmit
- javascript - 如何使用javascript附加到id javascript变量中