IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Fonctionnalité interactive d'une maquette avec un programme Arduino


Sujet :

Arduino

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut Fonctionnalité interactive d'une maquette avec un programme Arduino
    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......

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Salut,

    A première vue...

    ligne 16 : null (*action)();, c'est un pointeur de fonction, non ? J'aurais écrit : void (*action)(void);.

    Quant à la ligne 17 : MenuItem *sous-menu;, un nom de variable avec un signe - ne passera pas la compilation.

    Ton compilateur n'affiche pas les messages d'erreur ?

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LiquidCrystal LCD (8, 9, 4, 5, 6, 7);
    
    ...
    
    lcd.begin(LCD_COLS, LCD_ROWS);
    ...
    Entre LCD et lcd, il faut choisir...

    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
    struct MenuItem {
     const char *nom;
    ...
    MenuItem *sous_menu;
    }
    ...
    MenuItem *selectedMenu;
    ...
    lcd.print(selectedMenu[selectedItemIndex].name);
    ...
    
    lcd.write((octet)0);
    ...
    
    if (selectedMenu[selectedItemIndex].submenu != nullptr) {
    ...
    Conclusion : recopier du code dans un navigateur avec le traducteur anglais-français activé n'est pas une bonne idée

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    Merci pour votre réponse. effectivement mon compilateur affiche erreur. je vais cherché à corriger. à toute à l'heure.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    j'ai modifié et ça montré d'autre erreurs !
    le corrigé :
    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
    196
    197
     
    #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;
    void (*action)(void); 
     /*null (*action)();//int(null(int *action))()*/
     MenuItem *sous_menu;
    };//void (*action)(void);.
    /*
    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() {
    }
    Erreur qu'il affiche :
    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
     
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:29:29: error: 'fadimAction' was not declared in this scope
      new MenuItem[4]{{"FADIM ", fadimAction, nullptr},
                                 ^~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:34:34: error: 'aboubacarAction' was not declared in this scope
      new MenuItem[3]{{"ABOUBACAR " , aboubacarAction, nullptr},
                                      ^~~~~~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:38:30: error: 'aichaAction' was not declared in this scope
      new MenuItem[4]{{"AICHA " , aichaAction, nullptr},
                                  ^~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:43:31: error: 'mariamAction' was not declared in this scope
      new MenuItem[2]{{"MARIAM " , mariamAction, nullptr},
                                   ^~~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:45:54: error: 'mansourAction' was not declared in this scope
      {"MOUCTAR ", nullptr, new MenuItem[3]{{"MANSOUR " , mansourAction, nullptr},
                                                          ^~~~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino: In function 'void displaySubMenu()':
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:66:44: error: 'struct MenuItem' has no member named 'name'; did you mean 'nom'?
      lcd.print(selectedMenu[selectedItemIndex].name);
                                                ^~~~
                                                nom
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:68:13: error: 'octet' was not declared in this scope
      lcd.write((octet)0);
                 ^~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:71:19: error: expected ')' before numeric constant
      lcd.write((octet)1);
                       ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:74:48: error: 'struct MenuItem' has no member named 'name'; did you mean 'nom'?
      lcd.print(selectedMenu[selectedItemIndex + 1].name);
                                                    ^~~~
                                                    nom
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino: In function 'void navigateUp()':
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:94:38: error: 'struct MenuItem' has no member named 'submenu'; did you mean 'sous_menu'?
      if (selectedMenu[selectedItemIndex].submenu != nullptr) {
                                          ^~~~~~~
                                          sous_menu
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino: In function 'void navigateDown()':
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:109:21: error: a function-definition is not allowed here before '{' token
     void navigateLeft() {
                         ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:118:22: error: a function-definition is not allowed here before '{' token
     void navigateRight() {
                          ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:130:19: error: a function-definition is not allowed here before '{' token
     void selectItem() {
                       ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:142:20: error: a function-definition is not allowed here before '{' token
     void fadimAction() {
                        ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:149:24: error: a function-definition is not allowed here before '{' token
     void aboubacarAction() {
                            ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:156:20: error: a function-definition is not allowed here before '{' token
     void aichaAction() {
                        ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:163:21: error: a function-definition is not allowed here before '{' token
     void mariamAction() {
                         ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:170:22: error: a function-definition is not allowed here before '{' token
     void mansourAction() {
                          ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:177:14: error: a function-definition is not allowed here before '{' token
     void setup() {
                  ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:195:13: error: a function-definition is not allowed here before '{' token
     void loop() {
                 ^
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-9f5gl2.2tqxj\sketch_mar23a\sketch_mar23a.ino:196:1: error: expected '}' at end of input
     }
     ^
     
    exit status 1
     
    Compilation error: 'fadimAction' was not declared in this scope

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    j'ai l'impression que le traducteur de mon système avais modifié la nature du programme. et je crois que j'aie rectifié
    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
    196
    197
    198
    199
     
    #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;
    void (*action)(); 
     /*null (*action)();//int(null(int *action))()*/
     //MenuItem *submenu;// submenu 
     MenuItem *submenu;
    };//void (*action)(void);.
    /*
    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].nom);
     lcd.setCursor(LCD_COLS - 1, 0);
     lcd.write((byte)0);
     for (int i = 1; i < LCD_COLS; i++) {
     lcd.setCursor(i - 1, 1);
     lcd.write((byte)1);
     }
     lcd.setCursor(0, 1);
     lcd.print(selectedMenu[selectedItemIndex + 1].nom);
    }
     
    //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(menuItems) / 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();
      }*/
    navigateRight();  
    }
     
    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() {
    }
    il cette erreur de déclaration qui me fatigue, pouvez m'aider
    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
     
    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);
    et voila le message qu'il affiche :
    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
     
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-1h3x3ns.8396\sketch_mar23b\sketch_mar23b.ino:30:29: error: 'fadimAction' was not declared in this scope
      new MenuItem[4]{{"FADIM ", fadimAction, nullptr},
                                 ^~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-1h3x3ns.8396\sketch_mar23b\sketch_mar23b.ino:35:34: error: 'aboubacarAction' was not declared in this scope
      new MenuItem[3]{{"ABOUBACAR " , aboubacarAction, nullptr},
                                      ^~~~~~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-1h3x3ns.8396\sketch_mar23b\sketch_mar23b.ino:39:30: error: 'aichaAction' was not declared in this scope
      new MenuItem[4]{{"AICHA " , aichaAction, nullptr},
                                  ^~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-1h3x3ns.8396\sketch_mar23b\sketch_mar23b.ino:44:31: error: 'mariamAction' was not declared in this scope
      new MenuItem[2]{{"MARIAM " , mariamAction, nullptr},
                                   ^~~~~~~~~~~~
    C:\Users\HP LAPTOP\AppData\Local\Temp\.arduinoIDE-unsaved2023223-8328-1h3x3ns.8396\sketch_mar23b\sketch_mar23b.ino:46:54: error: 'mansourAction' was not declared in this scope
      {"MOUCTAR ", nullptr, new MenuItem[3]{{"MANSOUR " , mansourAction, nullptr},
                                                          ^~~~~~~~~~~~~
     
    exit status 1
     
    Compilation error: 'fadimAction' was not declared in this scope

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Un de vos soucis de compilation c'est que les fonctions que vous mettez en callback ne sont pas encore connues. Il faut faire une "forward declaration", ie dire au compilateur que la fonction existe et quelle est sa signature. Le code de la fonction peut être mis plus loin dans le code.


    vous n'arriverez pas à parcourir vos sous menu car vous aurez perdu le nombre d'éléments dans le tableau. Il faut modifier la structure pour qu'elle connaisse aussi le nombre de sous menus.

    une structure c'est quasiment comme une classe, alors j'ai rajouté au sein de la structure une fonction print() qui imprime le nom du menu, exécute son action s'il y en a une puis parcourt le tableau des sous menus en leur demandant aussi de s'imprimer

    essayez ce code dans le simulateur wokwi

    https://wokwi.com/projects/360002754811428865


    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
    // déclaration de la structure qui contient un menu et ses sous menus
    struct MenuItem {
      const char *nom;
      void (*action)();
      size_t numSubmenu;  // <== on a besoin du compte pour parcourir le tableau du sous menu
      MenuItem *submenu;
     
      void print() {
        Serial.print(nom);
        if (action != nullptr) {
          Serial.print(F(" -> ")); action();
        }
        Serial.println();
        for (size_t i = 0; i < numSubmenu; i++) {
          Serial.write('\t'); submenu[i].print();
        }
      }
    };
     
    // 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() {
      Serial.print(F("Fadim Action"));
    }
    void aboubacarAction() {
      Serial.print(F("Aboubacar Action"));
    }
    void aichaAction() {
      Serial.print(F("Aicha Action"));
    }
    void mariamAction() {
      Serial.print(F("Mariam Action"));
    }
    void mansourAction() {
      Serial.print(F("Mansour Action"));
    }
     
    // --------------
    void setup() {
      Serial.begin(115200); Serial.println();
      for (auto & m : menu) {
        Serial.println(F("--------"));
        m.print();
      }
    }
     
    void loop() {}
    vous verrez dans le moniteur série (à 115200 bauds)


    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
    --------
    MOHAMED
    	FADIM -> Fadim Action
    	KARIMA
    	FATOUMA
    	BAFODE
    --------
    ALHOUSSEIN
    	ABOUBACAR -> Aboubacar Action
    	BINTOU
    	IBRAHIM
    --------
    AMINE
    	AICHA -> Aicha Action
    	MOUSSA
    	YAHYA
    	YOUSSOUF
    --------
    ABDOULAH
    	MARIAM -> Mariam Action
    	DALOBA
    --------
    MOUCTAR
    	MANSOUR -> Mansour Action
    	BOBO
    	SIDIKI

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    =Jay M
    merci pour votre réponse et j'ai ensuite vérifié dans le woKwi effectivement ça affiche le MENU & SOUS-MENU.
    Par contre, j'aimerai affiché les texte sur le LCD à la place de SERIAL. donc, j'ai remplacé tous les SERIALs à des LCD et par fini j'ai une erreur qui me dit que " LCD" n'est pas déclarer.
    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
     
    #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);
     
    // déclaration de la structure qui contient un menu et ses sous menus
    struct MenuItem {
      const char *nom;
      void (*action)();
      size_t numSubmenu;  // <== on a besoin du compte pour parcourir le tableau du sous menu
      MenuItem *submenu;
     
      void print() {
        Lcd.print(nom);
        if (action != nullptr) {
          Lcd.print(F(" -> ")); action();
        }
        Lcd.println();
        for (size_t i = 0; i < numSubmenu; i++) {
          Lcd.write('\t'); submenu[i].print();
        }
      }
    };
     
    // 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(115200); 
      Lcd.println();
      for (auto & m : menu) {
        Lcd.println(F("--------"));
        m.print();
      }
    }
     
    void loop() {}
    merci pour tout votre disponibilité.

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Le C++ est sensible à la casse : le respect de l’usage des majuscules ou minuscules est clé ==> lcd ce n’est pas la même chose que Lcd par exemple

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    Jay M; j'ai l'impression que les boutons ne fonctionne pas.
    et voilà le fonctionnement du système que je souhaite :
    Quand la carte s’allume, qu’elle s’affiche à l’écran « GRANDE FAMILLE FADIGA ». Ensuite, quand on appuis sur un bouton peu importe lequel le texte « GRANDE FAMILLE FADIGA » disparaît et le Menu principal s’affiche. Je souhait faire défiler les éléments du menu et celui du sou menu avec 2 boutons (HAUT en BAS)ou(BAS en HAUT) avec petite flèche indicateur. Le bouton (SELECTION) me permet d’ouvrir le contenu de sous menu d’un élément de menu. Le bouton (AGUCHE) me permet de revenir à l’étape précédente.
    Voilà les éléments du MENU PRINCIPAL :
    MOHAMED
    ALHOUSSEIN
    AMINE
    ABDOULAH
    MOUCTAR
    Voilà les éléments du SOUS MENU de chaque élément du MENU PRINCIPAL :

    MOHAMED :
    FADIM
    KARIMA
    FATOUMA
    BAFODE
    ALHOUSSEIN :
    ABOUBACAR
    BINTOU
    IBRAHIM
    AMINE :
    AICHA
    MOUSSA
    YAHYA
    YOUSSOUF
    ABDOULAH :
    MARIAM
    DALOBA
    MOUCTAR :
    MANSOUR
    BOBO
    SIDIKI

    ensuite
    Jay M; lorsque je téléverse le programme le je vois quelques sous menu qui changent et les boutons ne fonctionnent pas
    le code:
    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
     
    #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 
     
    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() {}

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    - il faut virer tous les delay sinon les boutons ne fonctionneront pas bien
    - pour les boutons prenez une bibliothèque comme OneButton ou Bounce2 ça vous simplifiera la vie
    - ensuite il faudra pouvoir parcourir le menu sans tous les sens donc avoir des variables pour se souvenir de là où on est

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Jay M Voir le message
    - il faut virer tous les delay sinon les boutons ne fonctionneront pas bien
    j'ai fais mais pas de constat de changement.
    - pour les boutons prenez une bibliothèque comme OneButton ou Bounce2 ça vous simplifiera la vie
    - ensuite il faudra pouvoir parcourir le menu sans tous les sens donc avoir des variables pour se souvenir de là où on est
    ensuite quand le l'écran s'allume, il y'a un sous menu qui s'affiche directement et aussi pas de changement même quand j'appuis sur les boutons !!!!

    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
     
    #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 
     
    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() {}

  13. #13
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    euh...

    pour gérer des boutons il ne faut pas juste faire
    et croire qu'ensuite tout fonctionne de manière magique....

    regardez les exemples

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    Jay M
    j'ai essayé mais j'ai l'impression que quelques choses manques, ou bien c'est moi j'ai pas la bonne formule pour les boutons. lorsque je téléverse le code, à l'écran reste figé sur la 1ère ligne " MOHAMED" et sur la 2ème ligne, "<". toujours pas de réaction des boutons.

    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
    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);
    }

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 84
    Points : 25
    Points
    25
    Par défaut
    quelqu'un à une idée pour m'aider à faire fonctionner mes boutons ?

Discussions similaires

  1. Parcours d'une arborescence avec utilisation programmation parallèle
    Par Hiandzel dans le forum Général Python
    Réponses: 4
    Dernier message: 23/11/2017, 09h03
  2. Principe d'allumage d'une lampe avec la programmation
    Par zizo89 dans le forum Débuter
    Réponses: 14
    Dernier message: 03/04/2014, 23h04
  3. Ouvrir une console avec un programme C
    Par djibidl dans le forum Linux
    Réponses: 1
    Dernier message: 23/12/2012, 16h35
  4. Réponses: 1
    Dernier message: 30/07/2010, 10h15
  5. Réponses: 1
    Dernier message: 21/10/2006, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo