IR Remote and toneMelody loop results.value is random

/*
紅外線遙控傳輸IR_Remote有3支接腳:
面對X凸起面-左為Ouput:訊號(接7)
面對X凸起面-中為GND:接地
面對X凸起面-右為VCC:5V

需下載紅外線函數庫:IRremote by shirriff

*/

/*
有源蜂鳴器(有貼白色貼紙):內建固定頻率。
無源蜂鳴器(可看到電路板):用程式調頻率音調播放簡單的旋律
使用範本toneMelody.ino執行
*/

//無源蜂鳴器(可看到電路板):

#include "pitches.h" //載入音調和頻率的對照檔

//遙控器1:FF30CF、遙控器2:FF18E7、遙控器3:FF7A85、遙控器4:FF10EF、遙控器5:FF38C7、遙控器6:FF5AA5
//1:小旋律、2:卡農、3:給愛麗絲、4:聖誕1歌、5:聖誕2歌、6:聖誕3歌
//int song = 1;

// melody1旋律:小旋律
int melody1[] = 
{
  NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3 , 0, NOTE_B3, NOTE_C4 ,-1
};

// melody2旋律:卡農
int melody2[] = 
{
  NOTE_E3, NOTE_G4, NOTE_C5, NOTE_E5, NOTE_B2, NOTE_G4, NOTE_B4, NOTE_D5,  
  NOTE_C3, NOTE_E4, NOTE_A4, NOTE_C5, NOTE_G2, NOTE_E4, NOTE_G4, NOTE_B4,  
  NOTE_A2, NOTE_C4, NOTE_F4, NOTE_A4, NOTE_E1, NOTE_C4, NOTE_E4, NOTE_G4,  
  NOTE_A2, NOTE_D4, NOTE_F4, NOTE_A4, NOTE_B2, NOTE_D4, NOTE_G4, NOTE_B4,  
  NOTE_E3, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5,   
  NOTE_E5, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_G4,   
  NOTE_F4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4,   
  NOTE_F4, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5,  
  NOTE_E5, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_B4,  
  NOTE_C5, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_C5, NOTE_B4, NOTE_C5,  
  NOTE_A4, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5,  
  NOTE_A4, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_A4, NOTE_B4,  
  NOTE_C5,-1
};

// melody3旋律:給愛麗絲
int melody3[] = 
{ 
  0, 0, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_B4, NOTE_D5, NOTE_C5, 
  NOTE_A4, 0, NOTE_C4, NOTE_E4, NOTE_A4, NOTE_B4, 0, NOTE_E4, NOTE_G4, NOTE_B4, 
  NOTE_C5, 0, NOTE_E4, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_B4, NOTE_D5, NOTE_C5,
  NOTE_A4, 0, NOTE_C4, NOTE_E4, NOTE_A4, NOTE_B4, 0, NOTE_E4, NOTE_C5, NOTE_B4,
  NOTE_A4,-1
};

// melody4旋律:聖誕1歌
int melody4[] = 
{ 
  NOTE_E5, NOTE_E5, NOTE_E5,
  NOTE_E5, NOTE_E5, NOTE_E5,
  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
  NOTE_E5,
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
  NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
  NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
  NOTE_D5, NOTE_G5,-1
};

// melody5旋律:聖誕2歌
int melody5[] = 
{ 
  NOTE_B3, 
  NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4,
  NOTE_D4, NOTE_D4, NOTE_D4,
  NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,
  NOTE_E4, NOTE_E4, NOTE_E4,
  NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4,
  NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3,
  NOTE_D4, NOTE_G4, NOTE_E4,
  NOTE_F4,-1
};

// melody6旋律:聖誕3歌
int melody6[] = 
{ 
  NOTE_G4,
  NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
  NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5,
  NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4,
  NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4,
  NOTE_D4, NOTE_F4, NOTE_B3,
  NOTE_C4,-1
};

// noteDurations1拍子:小旋律
int noteDurations1[] = 
{
  4, 8, 8, 4, 4, 4, 4, 4,
  1
};

// noteDurations2拍子:卡農
int noteDurations2[] = 
{
  8, 8, 8, 8, 8, 8, 8, 8,  
  8, 8, 8, 8, 8, 8, 8, 8,   
  8, 8, 8, 8, 8, 8, 8, 8,   
  8, 8, 8, 8, 8, 8, 8, 8,   
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  8,16,16,8,16,16,16,16,16,16,16,16,16,16,  
  1
};

// noteDurations3拍子:給愛麗絲
int noteDurations3[] =
{ 
  4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 
  4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 
  4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
  4, 8, 8, 8, 8, 4, 8, 8, 8, 8,
  4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 
  4, 1
};

// noteDurations4拍子:聖誕1歌
int noteDurations4[] =
{ 
  8, 8, 4,
  8, 8, 4,
  8, 8, 8, 8,
  2,
  8, 8, 8, 8,
  8, 8, 8, 16, 16,
  8, 8, 8, 8,
  4, 4, 1
};

// noteDurations5拍子:聖誕2歌
int noteDurations5[] =
{ 
  4,
  4, 8, 8, 8, 8,
  4, 4, 4,
  4, 8, 8, 8, 8,
  4, 4, 4,
  4, 8, 8, 8, 8,
  4, 4, 8, 8,
  4, 4, 4,
  2, 1
};

// noteDurations6拍子:聖誕3歌
int noteDurations6[] =
{ 
  8,
  8, 8, 4, 4, 4,
  8, 8, 4, 4, 4,
  8, 8, 4, 4, 4,
  8, 8, 4, 2,
  4, 4, 4, 4,
  4, 2, 4,
  1, 1
};

// toneSpeed1音速:小旋律
int toneSpeed1 = 1000; //設定音速, 我用1800ms, 即1.8 秒當全音符

// toneSpeed2音速:卡農
int toneSpeed2 = 1800; //設定音速, 我用1800ms, 即1.8 秒當全音符

// toneSpeed3音速:給愛麗絲
int toneSpeed3 = 1800; //設定音速, 我用1800ms, 即1.8 秒當全音符

// toneSpeed4音速:聖誕1歌
int toneSpeed4 = 1000; //設定音速, 我用1800ms, 即1.8 秒當全音符

// toneSpeed5音速:聖誕2歌
int toneSpeed5 = 1000; //設定音速, 我用1800ms, 即1.8 秒當全音符

// toneSpeed6音速:聖誕3歌
int toneSpeed6 = 1000; //設定音速, 我用1800ms, 即1.8 秒當全音符

#include <IRremote.h>

int RECV_PIN = 8; //設定紅外線接收頭的PIN腳
IRrecv irrecv(RECV_PIN);

decode_results results; //接收訊號後會把結果存在results

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); //開始接收訊號!
  Serial.println("GO GO");
}

void loop()
{
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX); //接收訊號,以16進位型式輸出到監控視窗
    if(results.value == 0xFF30CF) //如果按下遙控器定鍵1
    {
      int song = 1;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody1[thisNote] >=0)
      {
        int noteDuration = toneSpeed1/noteDurations1[thisNote];
        tone(7, melody1[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;
      }
      noTone(7);  // 播完後靜音
    }
    if(results.value == 0xFF18E7) //如果按下遙控器定鍵2
    {
      int song = 2;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody2[thisNote] >=0)
      {
        int noteDuration = toneSpeed2/noteDurations2[thisNote];  
        tone(7, melody2[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;  
      }
      noTone(7);  // 播完後靜音
    }
    if(results.value == 0xFF7A85) //如果按下遙控器定鍵3
    {
      int song = 3;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody3[thisNote] >=0)
      {
        int noteDuration = toneSpeed3/noteDurations3[thisNote];  
        tone(7, melody3[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;  
      }
      noTone(7);  // 播完後靜音
    }
    if(results.value == 0xFF10EF) //如果按下遙控器定鍵4
    {
      int song = 4;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody4[thisNote] >=0)
      {
        int noteDuration = toneSpeed4/noteDurations4[thisNote];  
        tone(7, melody4[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;  
      }
      noTone(7);  // 播完後靜音
    }
    if(results.value == 0xFF38C7) //如果按下遙控器定鍵5
    {
      int song = 5;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody5[thisNote] >=0)
      {
        int noteDuration = toneSpeed5/noteDurations5[thisNote];  
        tone(7, melody5[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;  
      }
      noTone(7);  // 播完後靜音
    }
    if(results.value == 0xFF5AA5) //如果按下遙控器定鍵6
    {
      int song = 6;
      int thisNote = 0;  // 在此使用While 而不用 for
      while(melody6[thisNote] >=0)
      {
        int noteDuration = toneSpeed6/noteDurations6[thisNote];  
        tone(7, melody6[thisNote],noteDuration);  
        int pauseBetweenNotes = noteDuration * 1.30;  
        delay(pauseBetweenNotes);  
        thisNote++;  
      }
      noTone(7);  // 播完後靜音
    }
    irrecv.resume(); //接著接收下一個訊號
  }
  delay(100);
}

(J-M-L - Edited to add code tags as this was ugly)

Please edit your post and place the code inside code tags.

post to

I can't delete the previous post

You don't need to delete it. Just please edit and enclose the code in code tags.

as above
#[International]
#[中文 (Chinese)]

thanks for your guidance

Next time, you can just send a request to a moderator and they will move the post to the correct forum.

This SOP is very convenient, thank you

Don't double post in Chinese and English. Pick one forum and post your question there

I edited your post to add the code tags. please do the same for your post in the Chinese forum and decide which one you want to keep.

decide to keep

OK - we will close this one then.