Каждый раз, когда я загружаю свой код (play melody-) в arduino и нажимаю кнопку, он пропускает одни и те же ноты в массиве.Как так? - PullRequest
0 голосов
/ 15 февраля 2019

Я создал код, в котором при каждом нажатии кнопки воспроизводится следующая нота в песне.Но проблема в том, что по какой-то причине он продолжает пропускать одни и те же ноты в массиве.

Например (мой код):

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);Е (4) Е (4) Е (8).По какой-то причине он просто пропускает третий NOTE_E5, поэтому я просто положил туда другой NOTE_E5, и теперь он работает "просто отлично".

Кто-нибудь знает, почему он пропускает заметки?Это мой код?

1 Ответ

0 голосов
/ 15 февраля 2019

Я не знаю Марио мелодию, но в любом случае я думаю, что ваш код неверен:

Попробуйте это:

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
    }          
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...