/*
Ho riorganizzato il codice dividendolo in quattro funzioni principali:
- playMainTheme(): Suona il tema principale iniziale
- playBridge(): Suona la parte di transizione
- playVariation(): Suona una variazione del tema principale
- playFinale(): Suona la parte finale
Ogni funzione è responsabile di una sezione specifica della melodia.
Nel loop() principale, queste funzioni vengono chiamate in sequenza con brevi pause tra una sezione e l'altra.
Ho anche aggiunto più note alla definizione iniziale e alcuni nuovi valori per la durata delle note (come halfNote).
Puoi facilmente modificare:
- La durata delle note cambiando i valori delle costanti all'inizio
- Le pause tra le sezioni modificando i delay() nel loop()
- Il pin del buzzer cambiando buzzerPin
*/
// Pin del buzzer
const int buzzerPin = 27;
// Definizione delle note
#define NOTE_E5 659
#define NOTE_DS5 622
#define NOTE_E4 330
#define NOTE_DS4 311
#define NOTE_B4 494
#define NOTE_D5 587
#define NOTE_C5 523
#define NOTE_A4 440
#define NOTE_C4 262
#define NOTE_G4 392
#define NOTE_F4 349
#define NOTE_A3 220
// Durata delle note
const int quarterNote = 200*4; //semininima
const int eighthNote = 100*4; //croma
const int sixteenthNote = 50*4; // semicroma
const int halfNote = 400*4; // minima
void setup() {
pinMode(buzzerPin, OUTPUT);
}
// Prima parte della melodia (tema principale)
void playMainTheme() {
// Prima misura
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_DS5, sixteenthNote);
delay(sixteenthNote);
// Seconda misura
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_DS5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_B4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_D5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_C5, sixteenthNote);
delay(sixteenthNote);
// Terza misura
tone(buzzerPin, NOTE_A4, quarterNote);
delay(quarterNote);
}
// Seconda parte della melodia (bridge)
void playBridge() {
tone(buzzerPin, NOTE_C4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_A4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_B4, quarterNote);
delay(quarterNote);
tone(buzzerPin, NOTE_E4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_G4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_B4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_C5, quarterNote);
delay(quarterNote);
}
// Terza parte della melodia (variazione)
void playVariation() {
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_DS5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_DS5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_DS5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_E5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_B4, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_D5, sixteenthNote);
delay(sixteenthNote);
tone(buzzerPin, NOTE_C5, sixteenthNote);
delay(sixteenthNote);
}
// Quarta parte della melodia (finale)
void playFinale() {
tone(buzzerPin, NOTE_A4, eighthNote);
delay(eighthNote);
tone(buzzerPin, NOTE_C4, eighthNote);
delay(eighthNote);
tone(buzzerPin, NOTE_E4, eighthNote);
delay(eighthNote);
tone(buzzerPin, NOTE_A4, halfNote);
delay(halfNote);
}
void loop() {
// Suona la composizione completa
playMainTheme();
delay(100);
playBridge();
delay(100);
playVariation();
delay(100);
playFinale();
// Pausa prima di ripetere
delay(1000);
}