#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
int btn_Heure = 2, btn_Minute = 3, btn_Seconde = 4, btn_StartStop = 5;
bool etat_btn_Heure, etat_btn_Minute, etat_btn_Seconde, etat_btn_StartStop;

// déclare 8 tableaux de caractères spéciaux.
uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
uint8_t note[8]  = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check[8] = {0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0};
uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
uint8_t retarrow[8] = {	0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};
// déclare 1 tableau contenant le nom des 8 caractères spéciaux
String name[] = {"bell ",
                 "note ",
                 "clock",
                 "heart",
                 "duck ",
                 "check",
                 "cross",
                 "retarrow"
                };
String btn[] = {"hre  min  sec  start"};



void setup() {
  lcd.init(); lcd.backlight(); // Initailise lcd.
  //Assigne le mode INPUT_PULLUP aux 4 boutons poussoirs.
  for (int pin = 2; pin < 6; pin++) pinMode(pin, INPUT_PULLUP);
  // Créer 8 caractères spéciaux pour lcd.
  lcd.createChar(0, bell);
  lcd.createChar(1, note);
  lcd.createChar(2, clock);
  lcd.createChar(3, heart);
  lcd.createChar(4, duck);
  lcd.createChar(5, check);
  lcd.createChar(6, cross);
  lcd.createChar(7, retarrow);
  lcd.home();

  // Affiche les 8 caractères spéciaux à intervale de 3 secondes.
  for (int i = 0; i < 8; i++ ) {
    lcdPrintCenter("Caractere index: " + String(i), 0);
    lcd.setCursor(0, 2); // positionne le curseur.
    lcd.write(i); // affiche le caractère correspondant à i.
    lcd.print(" " + name[i]);
    delay(1000); // intervale de 3 secondes
  }
  //delay(3000);
  lcd.clear();
  lcdPrintCenter("Press any button...", 0);

}

void loop() {
  etat_btn_Heure = digitalRead(btn_Heure);
  etat_btn_Minute = digitalRead(btn_Minute);
  etat_btn_Seconde = digitalRead(btn_Seconde);
  etat_btn_StartStop = digitalRead(btn_StartStop);

  lcdPrintCenter(btn[0], 3);
  //si(etat_btn_Heure == LOW) { exécute le code... }
  if (!etat_btn_Heure) { //Si btn_Heure est pressé.
    lcd.clear();
    lcdPrintCenter("Bouton Heure", 1);
  }
  if (!etat_btn_Minute) {
    lcd.clear();
    lcdPrintCenter("Bouton Minute", 2);
  }
  if (!etat_btn_Seconde) {
    lcd.clear();
    lcdPrintCenter("Bouton Seconde", 1);
  }
  if (!etat_btn_StartStop) {
    lcd.clear();
    lcdPrintCenter("Bouton Start/Stop", 2);
  }
  delay(200);




}

// fonction perso pour centrer le texte à afficher sur lcd.
void lcdPrintCenter(String text, int ligne) {
  int len = text.length();  // défini la longeur de la variable text
  lcd.setCursor((20 - len) / 2, ligne);  // positionne le curseur au centre de la ligne choisie et soustrait la longeur du text à afficher
  lcd.print(text);    // affiche le text centré
}