// 腳位定義
const int pins[] = {8, 9, 10};
const int numSongs = 3;
// 音符定義
#define NOTE_0 0
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_G5 784
// 歡樂頌
int melody1[] = {
NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4,
NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4,
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
NOTE_E4, NOTE_D4, NOTE_D4, NOTE_0
};
int durations1[] = {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
// 小星星
int melody2[] = {
NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_A4, NOTE_G4, NOTE_0,
NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4,
NOTE_D4, NOTE_D4, NOTE_C4, NOTE_0
};
int durations2[] = {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
// 生日快樂
int melody3[] = {
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_0,
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_0
};
int durations3[] = {4,4,4,4,4,4,4,4,4,4,4,4,4,4};
// 對應旋律與節奏陣列
int* melodies[] = {melody1, melody2, melody3};
int* durations[] = {durations1, durations2, durations3};
int lengths[] = {
sizeof(melody1)/sizeof(int),
sizeof(melody2)/sizeof(int),
sizeof(melody3)/sizeof(int)
};
void setup() {
// 無需初始化
}
void loop() {
for (int i = 0; i < numSongs; i++) {
playMelody(pins[i], melodies[i], durations[i], lengths[i]);
delay(500); // 每首歌間隔
}
}
void playMelody(int pin, int* melody, int* duration, int length) {
for (int i = 0; i < length; i++) {
int noteDuration = 1000 / duration[i];
if (melody[i] != NOTE_0) {
tone(pin, melody[i], noteDuration);
}
delay(noteDuration * 1.3);
noTone(pin);
}
}
留言
張貼留言