/*
Boucle for ou boucle while ?
Réaliser un programme qui joue toutes les notes en montant du Do1= 65,4 Hz au Do6 = 2093 Hz
Attendre 5 secondes avant de recommencer
Brancher le piezo entre la masse et la patte piezo=7
Pour debuger le programme on affiche sur le moniteur série la fréquence de la note jouée
 */

/* 1) Zone 1 : la partie déclaration des variables (optionnelle) */
int piezo=7; // sélection de la broche (pin) sur laquelle est connectée la LED
float f; // déclarer la variable réelle f (fréquence)
int n;   // variable entière n numéro de la note jouée

/* 2) Zone 2 : la partie initialisation et configuration des entrées/sorties : la fonction setup ()*/
void setup() {
  pinMode(piezo, OUTPUT); // broche piezo configurée en sortie
  // Attention à la syntaxe ! Ne pas oublier ; à chaque fin de ligne de code.
  Serial.begin(9600);   // Initialise la liaison série à 9600 bauds pour afficher les résultats sur le moniteur série
}

/* 3) Zone 3 : la partie principale qui s'exécute en boucle : la fonction loop () */
void loop() {
  // Joue toutes les notes du Do2 au Do6 sur un Piezo
f=130.813; // fréquence du Do2
n=0;
// le Do6 a pour fréquence 2093 Hz
while (f<2093) {   // tant que f < Do6 faire
    tone(piezo,int(f));  // Joue la note calculée sur un Piezo (partie entière)
    affiche();     // Pour debuger affiche sur le moniteur série la note jouée
    f=f*1.05946;   // calcul la note suivante
    delay(300);    // la note est jouée durant 300 ms avant de passer à la suivante
                }  // Syntaxe : fin du contenu tant que () faire
  noTone(piezo);   // Arrête de jouer de la musique
  delay(5000);              // attendre 5 secondes 
}

/* Les fonctions utilisateur : */
void affiche() {
  n++; // incrémente de 1 le numéro de note jouée
  Serial.print(n);     // Affiche sur le moniteur série le numéro de la note jouée
  Serial.print("\t"); // \t : tabulation (caractère spécial \t : tab  \n : retour à la ligne \r retour chariot...
  Serial.println(f);  // affiche la variable f et retourne à la ligne
 }