/****************************************************************************************************************************************
    Projet Piano Diatonique:  Daniel Talbot Technicien
    Pour Ez-Weekend-Project au Club Technique des Laurentides
    Dans le cadre du programme C.I.P.A.D. (Cours d'initiation à la Programmation Arduino pour Débutant(e)s) gratuit et sans inscription.
    Copiez ce lien pour accéder à toutes les leçons déjà publiées...
    https://www.youtube.com/playlist?list=PLoffRtP427acSg1FbpFuH_g5ptz-aovFN
*                                                                                                                                        *
 ****************************************************************************************************************************************/
/**** ENTÊTE DÉCLARATIVE ***/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd1(0x25, 20, 4);

const int btnPins[8] = {12, 11, 10, 9, 8, 7, 6, 5};

const int Do4 = 262,
          Re4 = 294,
          Mi4 = 330,
          FA4 = 349,
          Sol4 = 392,
          La4 = 440,
          Si4 = 494,
          Do5 = 523;

const int KeyTones[] = {Do4, Re4, Mi4, FA4, Sol4, La4, Si4, Do5};

const int piezo = 13; // Buzzer relié à la broche 13.

char* Notes[] = {"DO ", "RE ", "MI ", "FA ", "SOL", "LA ", "SI ", "DO "};

int btn;

void setup() { // Initialisation.
  lcd1.init(); lcd1.backlight();

  pinMode(piezo, OUTPUT);   // définition du mode SORTIE à la broche 13.

  for (int i = 0; i < 8; i++) {
    pinMode(btnPins[i], INPUT_PULLUP);
  }
  lcd1.setCursor(8, 0); lcd1.print("Piano");
  lcd1.setCursor(5, 1); lcd1.print("Diatonique");
  lcd1.setCursor(8, 2); lcd1.print("Ready?");
  delay(1000);
  lcd1.setCursor(3, 2); lcd1.print("Press buttons");
}
void loop() {  //Exécution: du code principal à exécuter de manière répétitive | Balaie en boucle l'état des boutons du Joystick.
  PlayPiano();
}
void PlayPiano() {
  int pitch = 0;
  for (int i = 0; i < 8; i++) {
    if (digitalRead(btnPins[i]) == LOW) {
      pitch = KeyTones[i];
      btn = i;
    }
  }
  if (pitch) {
    //lcd1.setCursor(0, 2); lcd1.print("                   ");
    lcd1.setCursor(btn * 2, 3); lcd1.print(Notes[btn]);
    lcd1.setCursor(7, 2); lcd1.print("key: " + String(btn));
    tone(piezo, pitch);
  } else {
    lcd1.setCursor(0, 3); lcd1.print("                   ");
    noTone(piezo);
    lcd1.setCursor(0, 2); lcd1.print("                   ");
  }

}