每当我将我的(播放旋律)代码上传到arduino并按下按钮时,它都会跳过数组中的相同音符。怎么来的?

时间:2019-02-15 09:18:50

标签: c++ arduino

我编写了一个代码,每次按下按钮时,它将播放歌曲中的下一个音符。但是问题是,由于某种原因,它会不断跳过数组中的相同注释。

例如(我的代码):

int mariomelody[] = {
NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_C5, NOTE_E5, NOTE_G5, NOTE_G4, 
//THERE ARE TWO 'NOTE_E5's BECAUSE THE THIRD NOTE DOESNT PLAY
NOTE_C5, NOTE_G4, NOTE_E4, NOTE_A4, NOTE_B5, NOTE_AS4, NOTE_A4,
NOTE_G4, NOTE_E5, NOTE_G5, NOTE_A5, NOTE_F5, NOTE_G5, NOTE_E5,
NOTE_C5, NOTE_D5, NOTE_B4,


//buttonPin sits at DIG. 12
int buttonPin = 12;

void setup()
{
  // put your setup code here, to run once:
  pinMode(buttonPin, INPUT);
}



void loop()
{
  // put your main code here, to run repeatedly:

 for (int i = 0; i < sizeof(mariomelody) / sizeof(mariomelody[0]); i++)
  {    
      while (digitalRead(buttonPin) == HIGH)
      {
        tone(8, mariomelody[i], 20);
      }
      while (digitalRead(buttonPin) == LOW)
      {
      }
  }

每个人都知道马里奥旋律是正确的。前三个音符在不同速度下是相同的(4是速度8的一半)。 E(4)E(4)E(8)。由于某种原因,它只跳过了第三个NOTE_E5,所以我在这里放了另一个NOTE_E5,现在它可以正常工作了。

有人知道为什么它跳过注释吗?是我的代码吗?

1 个答案:

答案 0 :(得分:1)

我不知道mario的旋律,但无论如何,我认为您的代码是错误的:

尝试一下:

void loop()
{
  for (int i = 0; i < sizeof(mariomelody) / sizeof(mariomelody[0]); i++)
  {
    while (digitalRead(buttonPin) == LOW)
    {
      // wait until button is pressed
    }

    tone(8, mariomelody[i], 20);

    while (digitalRead(buttonPin) == HIGH)
    {
      // wait until button is released
    }          
  }
}