#define NOTE_D0 -1 2 #define NOTE_D1 294 3 #define NOTE_D2 330 4 #define NOTE_D3 350 5 #define NOTE_D4 393 6 #define NOTE_D5 441 7 #define NOTE_D6 495 8 #define NOTE_D7 556 9 10 #define NOTE_DL1 147 11 #define NOTE_DL2 165 12 #define NOTE_DL3 175 13 #define NOTE_DL4 196 14 #define NOTE_DL5 221 15 #define NOTE_DL6 248 16 #define NOTE_DL7 278 17 18 #define NOTE_DH1 589 19 #define NOTE_DH2 661 20 #define NOTE_DH3 700 21 #define NOTE_DH4 786 22 #define NOTE_DH5 882 23 #define NOTE_DH6 990 24 #define NOTE_DH7 112 25 //以上部分是定義是把每個音符和頻率值對應起來,其實不用打這么多,但是都打上了,后面可以隨意編寫 26 27 #define WHOLE 1 28 #define HALF 0.5 29 #define QUARTER 0.25 30 #define EIGHTH 0.25 31 #define SIXTEENTH 0.625 32 //這部分是用英文對應了拍子,這樣后面也比較好看 33 34 int tune[] = { 35 NOTE_D0,NOTE_D0,NOTE_D0,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3, 36 NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D4,NOTE_DH1, 37 NOTE_D3,NOTE_D3,NOTE_D0,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D4,NOTE_D4,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D0,NOTE_D6,NOTE_D7, 38 NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1, 39 NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_DH1,NOTE_D7,NOTE_D7,NOTE_DH1,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH3,NOTE_DH1,NOTE_DH1,NOTE_DH1, 40 NOTE_DH1,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D7,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_DH1,NOTE_DH2,NOTE_DH3,NOTE_DH2,NOTE_DH3,NOTE_DH5, 41 NOTE_DH2,NOTE_DH2,NOTE_DH2,NOTE_D5,NOTE_D5,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3, 42 NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH2,NOTE_DH2,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_DH4,NOTE_DH3,NOTE_DH2,NOTE_DH1, 43 NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1, 44 NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH5,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5, 45 NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D7 46 };//這部分就是整首曲子的音符部分,用了一個序列定義為tune,整數 47 48 float duration[]= { 49 1,1,1,0.5,0.5, 1+0.5,0.5,1,1, 1,1,1,0.5,0.5, 50 1+0.5,0.5,1,1, 1,1,1,1, 1+0.5,0.5,1,1, 51 1,1,0.5,0.5,0.5,0.5, 1+0.5,0.5,1,1, 1,1,1,0.5,0.5, 52 1+0.5,0.5,1,1, 1,1,1,0.5,0.5, 1+0.5,0.5,1,1, 53 1,1,1,0.5,0.5, 1,0.5,0.25,0.25,0.25,0.5, 0.5,0.5,0.5,0.25,0.5,1, 54 0.5,0.5,0.5,0.5,1,1, 1,1,1,0.5,0.5, 1+0.5,0.5,1,1, 55 1,1,1,0.5,0.5, 1.5,0.5,1,1, 1,1,1,1, 56 0.5,0.5,1,1,0.5,0.5, 1.5,0.25,0.5,1, 1,1,1,1, 57 1,1,1,1, 1,1,1,1, 0.5,0.5,1,1,0.5,0.5, 58 1,0.5,0.5,1,1, 1,1,1,1, 1,1,1,1, 59 0.5,0.5,1,1,0.5,0.5, 1,0.5,0.25,0.5,1, 1,1,1,0.5,0.5 60 };//這部分是整首曲子的節拍部分,也定義個序列duration,浮點(數組的個數和前面音符的個數是一樣的,一一對應么) 61 62 int length;//這里定義一個變量,后面用來表示共有多少個音符 63 int tonePin=5;//蜂鳴器的pin 64 65 void setup() 66 { 67 pinMode(tonePin,OUTPUT);//設置蜂鳴器的pin為輸出模式 68 length = sizeof(tune)/sizeof(tune[0]);//這里用了一個sizeof函數, 可以查出tone序列里有多少個音符 69 } 70 71 void loop() 72 { 73 74 for(int x=0;x 75 { 76 tone(tonePin,tune[x]);//此函數依次播放tune序列里的數組,即每個音符 77 delay(400*duration[x]);//每個音符持續的時間,即節拍duration,是調整時間的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧 78 noTone(tonePin);//停止當前音符,進入下一音符 79 } 80 delay(5000);//等待5秒后,循環重新開始 81 } |