// Pin del buzzer
const int buzzerPin = 27;

// Definizione delle note
#define NOTE_MI5  659
#define NOTE_RE5d 622  // RE# (RE diesis)
#define NOTE_MI4  330
#define NOTE_RE4d 311  // RE# (RE diesis)
#define NOTE_SI4  494
#define NOTE_RE5  587
#define NOTE_DO5  523
#define NOTE_LA4  440
#define NOTE_DO4  262
#define NOTE_SOL4 392
#define NOTE_FA4  349
#define NOTE_LA3  220
#define NOTE_SOL3 196

// 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
const int wholeNote = 800*4;      // semibreve

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

// Prima parte: "Jingle bells, jingle bells"
void playPartOne() {
  // "Jin-gle"
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  
  // "bells"
  tone(buzzerPin, NOTE_MI5, halfNote);
  delay(halfNote);
  
  // Ripete "Jin-gle bells"
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, halfNote);
  delay(halfNote);
}

// Seconda parte: "Jingle all the way"
void playPartTwo() {
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_SOL4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_DO5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_RE5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, wholeNote);
  delay(wholeNote);
}

// Terza parte: "Oh what fun..."
void playPartThree() {
  tone(buzzerPin, NOTE_FA4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_FA4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_FA4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_FA4, quarterNote);
  delay(quarterNote);
  
  tone(buzzerPin, NOTE_FA4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, eighthNote);
  delay(eighthNote);
  tone(buzzerPin, NOTE_MI5, eighthNote);
  delay(eighthNote);
}

// Quarta parte: finale
void playPartFour() {
  tone(buzzerPin, NOTE_MI5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_SOL4, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_DO5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_RE5, quarterNote);
  delay(quarterNote);
  tone(buzzerPin, NOTE_MI5, wholeNote);
  delay(wholeNote);
}

void loop() {
  // Suona la composizione completa
  playPartOne();
  delay(100);
  playPartTwo();
  delay(100);
  playPartThree();
  delay(100);
  playPartFour();
  
  // Pausa prima di ripetere
  delay(2000);
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2
bz1:1
bz1:2
bz2:1
bz2:2