Bonjour.
Je souhaiterais coder un menu pour un LCD 4 lignes.
Plutôt que de le faire en procédural, je vais le faire avec une classe Objet justement pour m'entrainer avec les classes. J'ai commencé, et ca marche à peu près sauf que la petite flèche qui définit le choix ne s'affiche pas à la fin du mot du menu. Vous verrez j'ai fait un petit sizeof() dans le code pour que la flèche s'affiche juste après le mot.
A mon avis il y a un problème de déclaration des strings dans la classe.
Pouvez vous m'en dire plus? Je précise que je débute en POO.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
class Menu
{
private:
int Choix;
const String NomChoix[4] = { "Choix Blanc", "Choix Noir", "Choix Rouge", "Choix Jaune"};
public:
Menu();
void UpdateMenu();
void Descendre();
void Monter();
};
Menu::Menu()
{
Choix = 0;
}
void Menu::UpdateMenu()
{
lcd.clear();
for (int i = 0; i < 4 ; i++) {
lcd.setCursor(0, i);
lcd.print(NomChoix[i]);
}
int LongMotChoix = sizeof(NomChoix[Choix]);
lcd.setCursor(LongMotChoix + 1, Choix);
lcd.print((char)127);
}
void Menu::Descendre()
{
if (Choix < 3) {
Choix++;
}
UpdateMenu();
}
void Menu::Monter()
{
if (Choix > 0) {
Choix--;
}
UpdateMenu();
}
Menu menu1;
void setup() {
lcd.init();
lcd.backlight();
lcd.begin(20, 4);
lcd.setCursor(0, 0);
lcd.clear();
}
void loop() {
menu1.Descendre();
delay(1000);
menu1.Descendre();
delay(1000);
menu1.Descendre();
delay(1000);
menu1.Monter();
delay(1000);
menu1.Monter();
delay(1000);
menu1.Monter();
delay(1000);
}