Я создал код, в котором при каждом нажатии кнопки воспроизводится следующая нота в песне.Но проблема в том, что по какой-то причине он продолжает пропускать одни и те же ноты в массиве.
Например (мой код):
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
, и теперь он работает "просто отлично".
Кто-нибудь знает, почему он пропускает заметки?Это мой код?