Happy birthday to you

#include <Servo.h> // include la Libreria Servo.h
Servo myservo;  // crea l’oggetto di tipo Servo, myservo sarà l’oggetto su cui opererai 
 
int buzzerPin = 5;  // pin a cui è attaccato il cicalino
// sensore ad ultrasuoni
int triggerPin = 11; // pin del trigger
int echoPin = 12; // pin dell'echo
 
int  pericolo = 50; // distanza in cm. Se un oggetto supera la soglia si "attiva" il tutto
 
int ledPin = 7; // pin della lucina
 
int motorPin = 9; // pin del servomotore
 
int pos =0;  // posizione iniziale del servomotore
 
int length = 28; // numero di "note" di jingle bells
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc"; //note di jingle bells (all'americana)
int beats[] = { 2,2,8,8,8,16,1,2,2,8,8,8,16,1,2,2,8,8,8,8,16,1,2,2,8,8,8,16}; // lunghezza della nota
int tempo = 200; // durata di un "beat" in millisecondi
 
// nota corrente
int nota = 0;
 
void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(buzzerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(buzzerPin, LOW);
    delayMicroseconds(tone);
  }
}
 
 
void playNote(char note, int duration) {
  char names[] = {'C', 'D', 'E', 'F', 'G',   'A', 'B',           
 
                 'c', 'd', 'e', 'f', 'g', 'a', 'b',
 
                  'x', 'y' };
 
int tones[] = { 1915, 1700, 1519, 1432, 1275,   1136, 1014,
 
                 956,  834,  765,  593,  468,  346,  224,
 
                  655 , 715 };
 
  // play the tone corresponding to the note name
  for (int i = 0; i < 17; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}
 
 
void setup(){
// imposto i pin
  pinMode(buzzerPin,OUTPUT);
  pinMode(triggerPin,OUTPUT);
  pinMode(echoPin,INPUT);
// inizializzo il servo motore
 
 // myservo.attach(motorPin);
  // myservo.write(0);
 
}
void loop() { 
//innesco il sensore ultrasonico
  digitalWrite(triggerPin,LOW);
  digitalWrite(triggerPin,HIGH);
  delay(10);
  digitalWrite(triggerPin,LOW);
 
// calcolo quanto ci mette a rispondere il sensore (andata e ritorno!)
  long durata = pulseIn(echoPin,HIGH);
// calcolo la distanza dell'oggetto dal sensore
// note: velocità del suono circa 340 m/s 
  long distanza = 0.034 * durata / 2; 
 
 
// se sono nel range del sensore e all'interno della zona di "pericolo" 
  if (distanza < pericolo and distanza >0) {
 
//suono la nota corrente della melodia
    if (notes[nota] == ' ') {
      delay(beats[nota] * tempo); // riposo
    } else {
      playNote(notes[nota], beats[nota] * tempo);
    }
 
//imposto (ciclicamente) la nota successiva
    nota = (nota +1) % length;
//accendo la lucina
 
    digitalWrite(ledPin,HIGH);
 
 
 
//mando avanti (ciclicamente) il serv motore
   // pos = (pos +10) % 180 ;
 
  ///  myservo.write(pos);
 
  } else {
//spengo la lucina
     digitalWrite(ledPin,LOW);
  }
}