T.T.2.J : Logo page d’accueil écran LCD
La librairie LiquidCrystal permet de créer 8 caractères spéciaux. Ces caractères sont créés en « allumant » ou « éteignant » des pixels sur la matrice de chaque caractère.
Mon écran LCD est un 20 x 4 donc il y a 4 lignes de 20 caractères et chaque caractère est composé de 5 x 8 pixels. Il existe des sites permettant de générer de code à intégrer ensuite dans le code Arduino pour afficher les caractères. J’ai utilisé celui-ci :
https://diyusthad.com/custom-character-generator-lcd
Le code Arduino que j’ai utilisé pour gérer le menu de ma télécommande utilise déjà 2 caractères spéciaux pour dessiner une flèche et un carré. Il me restait donc 6 caractères disponibles.
Je me suis inspiré de l’image ci-dessous pour faire mon logo :

J’ai utilisé une feuille Excel pour dessiner mon logo de petite locomotive afin de connaitre les pixels à mettre à 1 et ceux à 0 :

Grace au site précédemment cité, j’ai généré les codes ci-dessous correspondant aux 6 caractères spéciaux :

Dans le code Arduino avant le void setup(); j’ai créé les différents caractères grâce au code précédent, plus les 2 caractères de navigation dans le menu:
// **************  CREATION DU LOGO et des ICONES en custom character *********************
byte Loco1[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b11100,
  0b00100,
  0b00100,
  0b00011,
  0b00011
};
byte Loco2[8] = {
  0b00000,
  0b00000,
  0b10011,
  0b10001,
  0b10001,
  0b10001,
  0b11111,
  0b11111
};
byte Loco3[8] = {
  0b00000,
  0b00000,
  0b11000,
  0b10000,
  0b10000,
  0b10000,
  0b11000,
  0b11100
};
byte Loco4[8] = {
  0b00111,
  0b11111,
  0b11111,
  0b11111,
  0b11000,
  0b10011,
  0b00111,
  0b00011
};
byte Loco5[8] = {
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b01100,
  0b00001,
  0b10011,
  0b00001
};
byte Loco6[8] = {
  0b11110,
  0b11100,
  0b11000,
  0b11000,
  0b00100,
  0b10010,
  0b11011,
  0b10000
};
byte arrow[8] = {
  // creation d'1 flêche (custom character)
  0b10000,  //  *
  0b11000,  //  * *
  0b01100,  //   * *
  0b00111,  //    * * *
  0b01100,  //   * *
  0b11000,  //  * *
  0b10000,  //  *
  0b00000   //
};
byte box[8] = {
  // creation d'1 carré (custom character)
  0b00000,  //
  0b00000,  //
  0b11111,  //  * * * * *
  0b11111,  //  * * * * *
  0b11111,  //  * * * * *
  0b11111,  //  * * * * *
  0b11111,  //  * * * * *
  0b00000   //
};
Dans le Setup on associe chaque caractère à un objet pour la bibliothèque LCD :
 // CREER LES CHARACTERES SPECIAUX EN LES ASSOCIANTS A DES NUMEROS DE 0 à 7
  lcd.createChar(0, Loco1);  // creation des 6 parties du logo
  lcd.createChar(1, Loco2);
  lcd.createChar(2, Loco3);
  lcd.createChar(3, Loco4);
  lcd.createChar(4, Loco5);
  lcd.createChar(5, Loco6);
  lcd.createChar(6, arrow);  // creation du caractère flêche
  lcd.createChar(7, box);    // creation du caractère carré
Les logos étant affichés à 2 endroits mais uniquement au démarrage de la télécommande, j’ai inséré le code suivant dans le Setup qui n’est lu qu’une fois :
 //-----------------  Ecran LOGO ou Bienvenu  --------------
  lcd.clear();  // effacer l'écran
  // Ecrire un message sur l'ecran
  lcd.setCursor(4, 0);  //placer curseur colonne 5 ligne 0
  lcd.print("TELECOMMANDE");
  lcd.setCursor(6, 1);  //placer curseur colonne 7 ligne 1
  lcd.print("TRAIN DE");
  lcd.setCursor(7, 2);  //placer curseur colonne 8 ligne 2
  lcd.print("JARDIN");
  lcd.setCursor(16, 3);
  lcd.print("V1.5");
  // AFFICHER LE LOGO EN CHARACTERE SPECIAUX A GAUCHE
  lcd.setCursor(1, 1);
  lcd.write(0);  // Loco1
  lcd.setCursor(2, 1);
  lcd.write(1);  // Loco2
  lcd.setCursor(3, 1);
  lcd.write(2);  // Loco3
  lcd.setCursor(1, 2);
  lcd.write(3);  // Loco4
  lcd.setCursor(2, 2);
  lcd.write(4);  // Loco5
  lcd.setCursor(3, 2);
  lcd.write(5);  // Loco6
  // AFFICHER LE LOGO EN CHARACTERE SPECIAUX A DROITE
  lcd.setCursor(16, 1);
  lcd.write(0);  // Loco1
  lcd.setCursor(17, 1);
  lcd.write(1);  // Loco2
  lcd.setCursor(18, 1);
  lcd.write(2);  // Loco3
  lcd.setCursor(16, 2);
  lcd.write(3);  // Loco4
  lcd.setCursor(17, 2);
  lcd.write(4);  // Loco5
  lcd.setCursor(18, 2);
  lcd.write(5);  // Loco6
  delay(3000);  // affichage de l'ecran d'accueil 3 secondes
Voici ce que cela donne au final sur l’écran LCD :





