任何人都可以帮我写这个功能吗?我需要能够在两个不同的Piezos上同时播放两种不同的音调。我应该将代码更改为什么?
void beep (unsigned char speakerPin, int freq1, int freq2, long timeInMilliseconds)
{
int x;
long delayAmount1 = (long)(1000000/freq1);
long delayAmount2 = (long)(1000000/freq2);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount1*2));
for (x=0;x<loopTime;x++)
{
digitalWrite(speakerPin1,HIGH);
digitalWrite(speakerPin2,HIGH);
delayMicroseconds(delayAmount2);
digitalWrite(speakerPin1,LOW);
digitalWrite(speakerPin2,LOW);
delayMicroseconds(delayAmount2);
}
}
答案 0 :(得分:0)
你应该使用计时器和中断。它们将提供更准确的计时,并独立于loop()
运行。
已经有一个Arduino函数,tone()
一次只能播放一个音符,但它不能适应多个音符,因为它依赖于单个定时器的PWM。
相反,您需要编写一个中断服务程序,在正确的时间切换引脚,并在将来的适当时间设置下一个中断。您需要使用attachInterrupt()
,并使用一些全局volatile
变量来操作音调。
这是一项标准的学生练习,网上应该有很多例子。