#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define Relais_ERROR 600
#define TIME_INTERVAL 3000

//Variable à afficher par LCD des heures:minutes:secondes
int heures = 0, minutes = 0, secondes = 0;

int btn_Heure = 2;  //Bouton poussoir des heures
bool etatBtnHeure;           

int btn_Minute = 3; ///Bouton poussoir des minutes
bool etatBtnMinute;

int btn_Seconde = 4; //Bouton poussoir des secondes
bool etatBtnSeconde;

int nouveau = 0;
int btn_Start = 5;
//int aux;

int time_Start;
int Relais = 6;


void setup()
{
  lcd.init(); lcd.backlight();
  //  lcd.begin(16, 2);         // Configuramos el numero de columnas y filas del LCD.

  pinMode(btn_Heure, INPUT);     //Pin de pulsador de horas --> Entrada
  pinMode(btn_Minute, INPUT);     //Pin de pulsador de minutos --> Entrada
  pinMode(btn_Seconde, INPUT);     //Pin de pulsador de segundos --> Entrada
  pinMode(btn_Start, INPUT);
  pinMode(Relais, OUTPUT);


  lcd.setCursor(0, 0);
  lcd.print("Timer with");
  lcd.setCursor(1, 1);
  lcd.print("Arduino + LCD");
  delay(1000);
  lcd.clear();


}


void loop()
{
  etatBtnHeure = digitalRead(btn_Heure);
  etatBtnMinute = digitalRead(btn_Minute);
  etatBtnSeconde = digitalRead(btn_Seconde);
  time_Start = digitalRead(btn_Start);

  if (nouveau == 0) {
    lcd.setCursor(0, 0);
    lcd.print("Entrez l'heure");
    lcd.setCursor(1, 1);
    lcd.print(heures);
    lcd.print(":");
    lcd.print(minutes);
    lcd.print(":");
    lcd.print(secondes);
    lcd.print(":");
    delay(200);
    //lcd.clear();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    if (etatBtnHeure == HIGH) {

      heures = heures + 1;

      if (heures >= 59) {

        heures = 0;

      }

    } else {

      heures = heures;
    }
 while (etatBtnHeure) etatBtnHeure = digitalRead(btn_Heure);


    if (etatBtnMinute == HIGH) {

      minutes = minutes + 1;
      if (minutes >= 59) {

        minutes = 0;

      }

    } else {
      minutes = minutes;
    }
    while (etatBtnMinute) etatBtnMinute = digitalRead(btn_Minute);

    if (etatBtnSeconde == HIGH) {

      secondes = secondes + 1;

      if (secondes >= 59) {

        secondes = 0;

      }
    } else {

      secondes = secondes;

    }
 while (etatBtnSeconde) etatBtnSeconde = digitalRead(btn_Seconde);

    if (time_Start == HIGH) {

      nouveau = 1;

    } else {

      nouveau = 0;
    }
while (time_Start) time_Start = digitalRead(btn_Start);
  } else if (nouveau == 1) {

    lcd.setCursor(0, 0);
    lcd.print("Commencer");
    lcd.setCursor(1, 1);
    lcd.print(heures);
    lcd.print(":");
    lcd.print(minutes);
    lcd.print(":");
    lcd.print(secondes);
    lcd.print(":");
    delay(200);

    if (secondes == 0) {
      if (minutes != 0) {
        secondes = 59;
      }

      if (minutes <= 0) {
        minutes = 0;
      } else {
        minutes = minutes - 1;
      }
      if (minutes == 0) {
        if (heures != 0) {
          minutes = 59;
        }

        if (heures <= 0) {
          heures = 0;
        } else {
          heures = heures - 1;
        }

        if (heures == 0) {
          if (minutes == 0) {
            if (secondes == 0) {
              nouveau = 2;
            }
          }

        }

      }

    } else {
      secondes = secondes - 1;
      delay(1000);
    }




  }

  else if (nouveau == 2) {

    lcd.setCursor(0, 0);
    lcd.print("Fin");

    digitalWrite(Relais, HIGH);
    tone(Relais, 2000, 1000);
    delay(1000);
    digitalWrite(Relais, LOW);
    delay(1000);

    nouveau = 0;

    secondes = 0;
    minutes = 0;
    heures = 0;



  }





}
$abcdeabcde151015202530354045505560fghijfghij