在C#中编码多个Piezos

时间:2014-11-04 19:51:12

标签: c# arduino

任何人都可以帮我写这个功能吗?我需要能够在两个不同的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);

  }   
} 

1 个答案:

答案 0 :(得分:0)

你应该使用计时器和中断。它们将提供更准确的计时,并独立于loop()运行。

已经有一个Arduino函数,tone()一次只能播放一个音符,但它不能适应多个音符,因为它依赖于单个定时器的PWM。

相反,您需要编写一个中断服务程序,在正确的时间切换引脚,并在将来的适当时间设置下一个中断。您需要使用attachInterrupt(),并使用一些全局volatile变量来操作音调。

这是一项标准的学生练习,网上应该有很多例子。