/*arduino i2c lcd
  gestion afficheur LCD I2C
  lcd (16 colonnes 2 lignes) drivé en I2C par module PCF8574
  liens: https://github.com/mathertel/LiquidCrystal_PCF8574/blob/master/examples/LiquidCrystal_PCF8574_Test/LiquidCrystal_PCF8574_Test.ino
         https://wokwi.com/projects/397422190201808897
  test: ok sur nano
*/

#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display

int show = -1;

void setup() {
  int error;
  Serial.begin(115200);
  Serial.println("LCD...");

  // wait on Serial to be available on Leonardo
  while (!Serial) ;

  Serial.println("Dose: check for LCD");

  Wire.begin();
  Wire.beginTransmission(0x27);
  error = Wire.endTransmission();
  Serial.print("Error: ");
  Serial.print(error);

  if (error == 0) {
    Serial.println(": LCD found.");
    show = 0;
    lcd.begin(16, 2); // initialize the lcd
  } // fin if
  else {
    Serial.println(": LCD not found.");
  } // fin else
} // fin setup

void loop() {
  if (show == 0) {
    lcd.setBacklight(255);
    lcd.home();
    lcd.clear();
    lcd.print("Hello LCD");
    delay(1000);

    lcd.setBacklight(0);
    delay(400);
    lcd.setBacklight(255);
  }
  else if (show == 1) {
    lcd.clear();
    lcd.print("Cursor On");
    lcd.cursor();
  }
  else if (show == 2) {
    lcd.clear();
    lcd.print("Cursor Blink");
    lcd.blink();
  }
  else if (show == 3) {
    lcd.clear();
    lcd.print("Cursor OFF");
    lcd.noBlink();
    lcd.noCursor();
  }
  else if (show == 4) {
    lcd.clear();
    lcd.print("Display Off");
    lcd.noDisplay();
  }
  else if (show == 5) {
    lcd.clear();
    lcd.print("Display On");
    lcd.display();
  }
  else if (show == 7) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("*** first line.");
    lcd.setCursor(0, 1);
    lcd.print("*** second line.");
  }
  else if (show == 8) {
    lcd.scrollDisplayLeft();
  } // fin else if
  else if (show == 9) {
    lcd.scrollDisplayLeft();
  } // fin else if
  else if (show == 10) {
    lcd.scrollDisplayLeft();
  } // fin else if
  else if (show == 11) {
    lcd.scrollDisplayRight();
  } // fin else if
  else if (show == 12) {
    lcd.clear();
    lcd.print("write-");
  } // fin else if
  else if (show > 12) {
    lcd.print(show - 13);
  } // fin else if

  delay(1400);
  show = (show + 1) % 16;
} // fin loop