1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
#include <Bounce2.h>
#include <LiquidCrystal.h> // inclure la bibliothèque pour l'écran LCD
#define LCD_COLS 16
#define LCD_ROWS 2
#define BTN_UP A0
#define BTN_DOWN A1
#define BTN_LEFT A2
#define BTN_RIGHT A3
#define BTN_SELECT A4
Bounce debouncerUp = Bounce();
Bounce debouncerDown = Bounce();
Bounce debouncerLeft = Bounce();
Bounce debouncerRight = Bounce();
Bounce debouncerSelect = Bounce();
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); // initialiser l'objet LCD
struct MenuItem {
const char *nom;
void (*action)();
size_t numSubmenu;
MenuItem *submenu;
void print() {
lcd.print(nom);
lcd.setCursor(0, 1);
if (action != nullptr) {
lcd.print(" -> ");
action();
}
lcd.println();
for (size_t i = 0; i < numSubmenu; i++) {
lcd.print("\t");
submenu[i].print();
}
}
};
// Le reste du code est inchangé
// déclaration des callbacks (en avance car besoin dans la définition du menu)
void fadimAction();
void aboubacarAction();
void aichaAction();
void mariamAction();
void mansourAction();
// définition des sous menus
MenuItem mohamedSubMenu[] = {
{"FADIM", fadimAction, 0, nullptr},
{"KARIMA", nullptr, 0, nullptr},
{"FATOUMA", nullptr, 0, nullptr},
{"BAFODE", nullptr, 0, nullptr},
};
const size_t numMohamedSubMenu = sizeof mohamedSubMenu / sizeof * mohamedSubMenu;
MenuItem alhousseinSubMenu[] = {
{"ABOUBACAR", aboubacarAction, 0, nullptr},
{"BINTOU", nullptr, 0, nullptr},
{"IBRAHIM", nullptr, 0, nullptr},
};
const size_t numAlhousseinSubMenu = sizeof alhousseinSubMenu / sizeof * alhousseinSubMenu;
MenuItem amineSubMenu[] = {
{"AICHA", aichaAction, 0, nullptr},
{"MOUSSA", nullptr, 0, nullptr},
{"YAHYA", nullptr, 0, nullptr},
{"YOUSSOUF", nullptr, 0, nullptr},
};
const size_t numAmineSubMenu = sizeof amineSubMenu / sizeof * amineSubMenu;
MenuItem abdoulahSubMenu[] = {
{"MARIAM", mariamAction, 0, nullptr},
{"DALOBA", nullptr, 0, nullptr},
};
const size_t numAbdoulahSubMenu = sizeof abdoulahSubMenu / sizeof * abdoulahSubMenu;
MenuItem mouctarSubMenu[] = {
{"MANSOUR", mansourAction, 0, nullptr},
{"BOBO" , nullptr, 0, nullptr},
{"SIDIKI", nullptr, 0, nullptr},
};
const size_t numMouctarSubMenu = sizeof mouctarSubMenu / sizeof * mouctarSubMenu;
// définition du menu principal
MenuItem menu[] = {
{"MOHAMED", nullptr, numMohamedSubMenu, mohamedSubMenu},
{"ALHOUSSEIN", nullptr, numAlhousseinSubMenu, alhousseinSubMenu},
{"AMINE", nullptr, numAmineSubMenu, amineSubMenu},
{"ABDOULAH", nullptr, numAbdoulahSubMenu, abdoulahSubMenu},
{"MOUCTAR", nullptr, numMouctarSubMenu, mouctarSubMenu},
};
size_t numMenuItems = sizeof menu / sizeof * menu;
// définition des callbacks
void fadimAction() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Fadim Action"));
//delay(2000);
}
void aboubacarAction() {
//Lcd.print(F("Aboubacar Action"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Aboubacar Action"));
//delay(2000);
}
void aichaAction() {
//Lcd.print(F("Aicha Action"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Aicha Action"));
//delay(2000);
}
void mariamAction() {
//lcd.print(F("Mariam Action"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Mariam Action"));
//delay(2000);
}
void mansourAction() {
//lcd.print(F("Mansour Action"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Mansour Action"));
//delay(2000);
}
void setup() {
lcd.begin(16, 2); // initialiser l'écran LCD
lcd.clear(); // effacer l'écran
lcd.print("Menu principal:");
lcd.setCursor(0, 1);
for (auto & m : menu) {
m.print();
}
}
///////////////////////
void loop() {
// Lire l'état des boutons avec debounce
static Bounce btnUp = Bounce();
static Bounce btnDown = Bounce();
static Bounce btnLeft = Bounce();
static Bounce btnRight = Bounce();
static Bounce btnSelect = Bounce();
btnUp.attach(BTN_UP, INPUT_PULLUP);
btnDown.attach(BTN_DOWN, INPUT_PULLUP);
btnLeft.attach(BTN_LEFT, INPUT_PULLUP);
btnRight.attach(BTN_RIGHT, INPUT_PULLUP);
btnSelect.attach(BTN_SELECT, INPUT_PULLUP);
btnUp.update();
btnDown.update();
btnLeft.update();
btnRight.update();
btnSelect.update();
// Changer la sélection en fonction des boutons appuyés
static size_t selection = 0;
if (btnUp.fell()) {
if (selection > 0) {
selection--;
}
}
if (btnDown.fell()) {
if (selection < numMenuItems - 1) {
selection++;
}
}
if (btnLeft.fell()) {
MenuItem& currentItem = menu[selection];
if (currentItem.numSubmenu > 0) {
selection = 0;
} else if (currentItem.action != nullptr) {
currentItem.action();
}
}
if (btnRight.fell()) {
MenuItem& currentItem = menu[selection];
if (currentItem.numSubmenu > 0) {
selection = 0;
} else if (currentItem.action != nullptr) {
currentItem.action();
}
}
if (btnSelect.fell()) {
MenuItem& currentItem = menu[selection];
if (currentItem.numSubmenu > 0) {
selection = 0;
} else if (currentItem.action != nullptr) {
currentItem.action();
}
}
// Afficher la sélection sur l'écran LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(menu[selection].nom);
lcd.setCursor(0, 1);
if (menu[selection].numSubmenu > 0) {
lcd.print(">");
} else if (menu[selection].action != nullptr) {
lcd.print(" ");
menu[selection].action();
}
delay(50);
} |
Partager