/* Arduino Kurs FES Juli 2017 Programm 7: Melodie */ // Frequenzen der Töne von 2 Oktaven #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 int speaker_pin = 9; // Laustprecher an Pin 9 int button_pin = 12; // Taster an Pin 12 void setup() { pinMode(speaker_pin, OUTPUT); // Lautsprecher am Ausgang pinMode(button_pin, INPUT_PULLUP); // Taster am Eingang } void loop() { if (digitalRead(button_pin) == LOW) { // warte auf einen Tastendruck play_melody(2500); // dann spiel die Melodie }; } /* play_melody(): Funktion zum Abspielen eines Songs */ void play_melody(int song_speed) { int melody_tone[22] = { // Definition der Melodie-Töne NOTE_E4, NOTE_DS4, // Auftakt NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_B3, NOTE_D4, NOTE_C4, // Takt 1 NOTE_A3, 0, NOTE_C3, NOTE_E3, NOTE_A3, // Takt 2 NOTE_B3, 0, NOTE_E3, NOTE_GS3, NOTE_B3, // Takt 3 NOTE_C4, 0, NOTE_C4, NOTE_A3 }; // letzter Takt int melody_duration[22] = { // Definition der Ton-Längen 16, 16, // 4 für viertel, 8 für achtel, usw. 16, 16, 16, 16, 16, 16, // Takt 1 8, 16, 16, 16, 16, // Takt 2 8, 16, 16, 16, 16, // Takt 3 8, 8, 16, 8}; // letzter Takt for (int i = 0; i < 22; ++i) { // Schleife durch alle Melodie-Töne if (melody_tone[i] > 0) // 0 bedeutet Pause, alles andere sind Töne tone(speaker_pin, melody_tone[i]); // starte den Ton delay(song_speed / melody_duration[i]); // warte die Länge der Note ab noTone(speaker_pin); // stopp die Ausgabe am Lautsprecher delay(song_speed / 100); // mach eine kurze Pause vor dem nächsten Ton } }