// Solution du laboratoire: DOC11.3.5

#include <LiquidCrystal_I2C.h>

#define POT                           A0
#define LCD_POSITION_POT              10
#define QUATRE_ESPACES                "    "
#define DEUX_ESPACES                  "  "
#define LCD_POSITION_VOLUME           10
#define LCD_LIGNE_NO_1                0
#define LCD_LIGNE_NO_2                1
#define LCD_DEBUT_LIGNE               0
#define LCD_NB_LIGNE                  2
#define LCD_NB_COLONNE                16
#define DELAI_MSG_OUVERTURE           3000
#define LCD_ADRESSE_I2C               0x27
#define NOM_PROJET                    "Labo DOC11.3.5"
#define VERSION_PROJET                "Version 1.0b"
#define DELAI_VERSION_WOKWI           200

LiquidCrystal_I2C ecranLCD(LCD_ADRESSE_I2C,LCD_NB_COLONNE,LCD_NB_LIGNE);
char msg[17];

void setup() {
  ecranLCD.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);
  ecranLCD.print(NOM_PROJET);
  ecranLCD.setCursor(LCD_DEBUT_LIGNE, LCD_LIGNE_NO_2);
  sprintf(msg, "%s", VERSION_PROJET);
  ecranLCD.print(msg);
  delay(DELAI_MSG_OUVERTURE);
  ecranLCD.clear();

  ecranLCD.print("Val. Pot: ");
  ecranLCD.setCursor(LCD_DEBUT_LIGNE, LCD_LIGNE_NO_2);
  ecranLCD.print("Volume  : ");
} // setup()

void loop() {
  int valeurPot = analogRead(POT);
  
  // Effacer l'ancienne valeur du POT
    ecranLCD.setCursor(LCD_POSITION_POT , LCD_LIGNE_NO_1 ); 
    ecranLCD.print(QUATRE_ESPACES); 

  // Afficher la valeur du POT
    ecranLCD.setCursor(LCD_POSITION_POT , LCD_LIGNE_NO_1 ); 
    ecranLCD.print(valeurPot); 

  // Effacer l'ancienne valeur du volume
    ecranLCD.setCursor(LCD_POSITION_VOLUME , LCD_LIGNE_NO_2 ); 
    ecranLCD.print(DEUX_ESPACES); 
  // Afficher la valeur du volume
  ecranLCD.setCursor(LCD_POSITION_VOLUME , LCD_LIGNE_NO_2 ); 
  ecranLCD.print(map(valeurPot, 0, 1023 , 0, 10)); 

  delay(DELAI_VERSION_WOKWI); 
} // loop()