bonjour cher membre !
je suis entrain de concevoir la maquette d'un établissement technique, en ajoutant une fonctionnalité interactive à fin que le visiteur puis avoir des informations sur l'établissement en interagissant avec la maquette. cette fonctionnalité interactive a aura 2 possibilités :
1ère Possibilité : se servir des clavier pour enfin parcourir le menu et activé ce que nous souhaitons;
2ème Possibilité : se servir d'un micro pour la commande vocale et avoir les réponses que vous souhaitez.
pour le matériels, je dispose d'une carte arduino Mega, un écran LCD keypad shield Module D1 ROBOT, un MH-SD Card Module /, un haut-Parleur 4 ohms et pour le moment je ne dispose pas ce module mais je l'ai commandé.
pour le moment, je vais pas utiliser le microphone.

je souhait intégré dans mon programme des Menus et des Sous-Menus.
Les Menus : { BIOGRAPHIE-LYCEE; FILIERES; BATIMENTS; CONCEPTEUR DE MAQUETTE...}

Les Sous-Menus de chaque Menus
Menus BIOGRAPHIE-LYCEE : "le lycée a été créé et ouvert durant l'année scolaire 1946-1946 sous le nom de cours secondaire protestant ";
Menu FILIERES : " Géni Mécanique; Géni informatique; Construction Mécanique, Electromécanique"
Menu BATIMENTS : " BATIMENTS A; BATIMENTS B; BATIMENTS C; BATIMENTS F; ..."
Menu CONCEPTEUR DE MAQUETTE : "FADIM-TECH".

le fonctionnement du système :
lorsque la carte s'allume, qu'elle face défilé ce texte sur l'écran LCD " BIENVENUE AU LTA, JE SUIS VOTRE GUIDE...". ensuite lorsque l l'un des 5 boutons est appuyé, le menu principal s'affiche. les 2 Boutons (UP, DOWN) permettent de faire défilé les Menus et le Sous-Menus. le Bouton ( SELECT) permet de sélectionner le Menu correspondant et lire son contenu. le Boutons "LEFT" permet de revenir à l'étape précédente.
je souhaite me limiter le Menus et les Sous-Menus et intégré au fur et à mesure la fonctionnalité du haut-parleur et du microphone.

une petite précision, le contexte est le même. ici au lieu du DEPARTEMENT, J'ai utilisé un exemple sur la FAMILLE. et le soucis est qu'on m'affiche les erreurs de syntaxe. si vous pouvez m'aider à corriger ces me fera avancer dans mon projet. merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#include <LiquidCrystal.h>
 
#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
 
LiquidCrystal LCD (8, 9, 4, 5, 6, 7);
 
struct MenuItem {
 const char *nom;
 null (*action)();//int(null(int *action))()
 MenuItem *sous-menu;
};
/*
struct MenuItem {
const char *nom;
null (*action)();
MenuItem *sous-menu;
};
*/
MenuItem menuItems[] = {
 {"MOHAMED ", nullptr,
 new MenuItem[4]{{"FADIM ", fadimAction, nullptr},
 {"KARIMA " , nullptr, nullptr},
 {"FATOUMA " , nullptr, nullptr},
 {"BAFODE " , nullptr, nullptr}}},
 {"ALHOUSSEIN ", nullptr,
 new MenuItem[3]{{"ABOUBACAR " , aboubacarAction, nullptr},
 {"BINTOU " , nullptr, nullptr},
 {"IBRAHIM " , nullptr, nullptr}}},
 {"AMINE ", nullptr,
 new MenuItem[4]{{"AICHA " , aichaAction, nullptr},
 {"MOUSSA " , nullptr, nullptr},
 {"YAHYA " , nullptr, nullptr},
 {"YOUSSOUF " , nullptr, nullptr}}},
 {"ABDOULAH ", nullptr,
 new MenuItem[2]{{"MARIAM " , mariamAction, nullptr},
 {"DALOBA " , nullptr, nullptr}}},
 {"MOUCTAR ", nullptr, new MenuItem[3]{{"MANSOUR " , mansourAction, nullptr},
 {"BOBO " , nullptr, nullptr},
 {"SIDIKI " , nullptr, nullptr}}}};
int numMenuItems = sizeof(menuItems) / sizeof(MenuItem);
 
MenuItem *selectedMenu;
int selectedItemIndex = 0;
 
//Afficher le menu principal
void displayMainMenu() {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" GRANDE FAMILLE " );
 lcd.setCursor(0, 1);
 lcd.print(" FADIGA ");
}
 
//Afficher le sous-menu actuel
void displaySubMenu() {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(selectedMenu[selectedItemIndex].name);
 lcd.setCursor(LCD_COLS - 1, 0);
 lcd.write((octet)0);
 for (int i = 1; i < LCD_COLS; i++) {
 lcd.setCursor(i - 1, 1);
 lcd.write((octet)1);
 }
 lcd.setCursor(0, 1);
 lcd.print(selectedMenu[selectedItemIndex + 1].name);
}
 
//Naviguez dans le menu
void navigateUp() {
 selectedItemIndex--;
 if (selectedItemIndex < 0) {
 selectedItemIndex = numMenuItems - 1;
 }
 if (selectedItemIndex % LCD_ROWS == LCD_ROWS - 1) {
 selectedItemIndex -= LCD_ROWS - 1;
 }
 if (selectedItemIndex < 0) {
 selectedItemIndex += numMenuItems;
 if (numMenuItems % LCD_ROWS == 0) {
 selectedItemIndex -= LCD_ROWS;
 } else {
 selectedItemIndex -= numMenuItems % LCD_ROWS;
 }
 }
 if (selectedMenu[selectedItemIndex].submenu != nullptr) {
 displaySubMenu();
 } else {
 displayMainMenu();
 }
}
 
//Naviguez dans le menu
void navigateDown() {
 selectedItemIndex++;
 if (selectedItemIndex >= numMenuItems) {
 selectedItemIndex = 0;
 }
 /////////////////////////////////
 
void navigateLeft() {
  if (selectedMenu != menuItems) {
    selectedMenu--;
    numMenuItems = sizeof(selectedMenu) / sizeof(MenuItem);
    selectedItemIndex = 0;
    displaySubMenu();
  }
}
 
void navigateRight() {
  if (selectedMenu[selectedItemIndex].submenu != nullptr) {
    selectedMenu = selectedMenu[selectedItemIndex].submenu;
    numMenuItems = sizeof(selectedMenu) / sizeof(MenuItem);
    selectedItemIndex = 0;
    displaySubMenu();
  } else {
    selectedMenu[selectedItemIndex].action();
    displaySubMenu();
  }
}
 
void selectItem() {
  if (selectedMenu[selectedItemIndex].submenu != nullptr) {
    selectedMenu = selectedMenu[selectedItemIndex].submenu;
    numMenuItems = sizeof(selectedMenu) / sizeof(MenuItem);
    selectedItemIndex = 0;
    displaySubMenu();
  } else {
    selectedMenu[selectedItemIndex].action();
    displaySubMenu();
  }
}
 
void fadimAction() {
  lcd.clear();
  lcd.print("Selected FADIM");
  delay(2000);
  displaySubMenu();
}
 
void aboubacarAction() {
  lcd.clear();
  lcd.print("Selected ABOUBACAR");
  delay(2000);
  displaySubMenu();
}
 
void aichaAction() {
  lcd.clear();
  lcd.print("Selected AICHA");
  delay(2000);
  displaySubMenu();
}
 
void mariamAction() {
  lcd.clear();
  lcd.print("Selected MARIAM");
  delay(2000);
  displaySubMenu();
}
 
void mansourAction() {
  lcd.clear();
  lcd.print("Selected MANSOUR");
  delay(2000);
  displaySubMenu();
}
 
void setup() {
  pinMode(BTN_UP, INPUT_PULLUP);
  pinMode(BTN_DOWN, INPUT_PULLUP);
  pinMode(BTN_LEFT, INPUT_PULLUP);
  pinMode(BTN_RIGHT, INPUT_PULLUP);
  pinMode(BTN_SELECT, INPUT_PULLUP);
 
  lcd.begin(LCD_COLS, LCD_ROWS);
  selectedMenu = menuItems;
  displayMainMenu();
 
  attachInterrupt(digitalPinToInterrupt(BTN_UP), navigateUp, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN_DOWN), navigateDown, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN_LEFT), navigateLeft, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN_RIGHT), navigateRight, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN_SELECT), selectItem, FALLING);
}
 
void loop() {
}
JE SUIS OUVERT A TOUTES VOS QUESTION......