
Énumération ou enum est un type de données défini par l’utilisateur en C.
Il est principalement utilisé pour attribuer des noms à des constantes entières (int).
Ces noms facilitent la lecture et la maintenance d’un programme.
Le mot-clé ‘enum’ est utilisé pour déclarer de nouveaux types d’énumération en C et C++.
Voici des exemples d’utilisation de l’instruction ‘enum‘:
// Exemple 01
enum Etat {VRAI = 1, FAUX = 0};
// Convention de noms: LeType, les membres (VRAI|FAUX ou vrai|faux)
// Exemple 02
enum JourDeLaSemaine {
dimanche,
lundi,
mardi,
mercredi,
jeudi,
vendredi,
samedi
};
Note: Si nous n’attribuons pas explicitement de valeurs aux membres du enum, le compilateur affecte par défaut des valeurs à partir de 0. Par exemple, dans l’exemple 02 précédent, dimanche obtient la valeur 0, lundi vaut 1, etc.
#include "Streaming.h"
enum Menu {
option1, // vaut 0
option2, // vaut 1
option3 // vaut 2
};
void setup(){
Serial.begin(9600);
Menu unMenu = option2;
switch (unMenu) {
case option2: Serial << "Option 2"; break;
default: Serial << "Choix invalide!";
} // switch
} // setup()
void loop(){}
#include "Streaming.h"
enum Menu {
option1 = 1,
option2 = 2,
option3 = 0
};
void setup(){
Serial.begin(9600);
Menu unMenu = option3;
switch (unMenu) {
case option1: Serial << "Option 1"; break;
case option2: Serial << "Option 2"; break;
case option3: Serial << "Option 3"; break;
default: Serial << "Choix invalide!";
} // switch
} // setup()
void loop(){}
// Exemple d'utilisation de l'instruction 'enum'
#include <Streaming.h>
enum desFruits {
pomme,
cerise,
kiwi,
banane,
fraise = 99
};
void setup() {
Serial.begin(115200);
desFruits unFruit = kiwi;
switch (unFruit) {
case kiwi: Serial << "Je suis un kiwi ;-)"; break;
default: Serial << "Je suis un fruit non traité";
} // switch
Serial << " et j'ai la valeur: " << unFruit << endl;
} // setup()
void loop() {
// put your main code here, to run repeatedly:
}

/*
Projet: Enum+Menu
Auteur: Alain Boudreault
Date: 2022.10.23
------------------------------------
Description: Exemple d'utilisation de l'instruction 'enum' pour la gestion
d'un menu affiché sur un LCD.
*/
#define DEBUG
#define WOKWI
#include <Streaming.h>
#include "projet.h" // Les 'define's du projet sont dans un fichier à part.
#ifdef WOKWI
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C ecranLCD(LCD_ADRESSE_I2C,LCD_NB_COLONNE,LCD_NB_LIGNE);
#else
#include "rgb_lcd.h"
rgb_lcd ecranLCD;
#endif
void setup() {
#ifdef DEBUG
Serial.begin(UART_VITESSE);
Serial << "Début du projet enum+menu\n";
#endif
pinMode(BOUTON, INPUT);
ecranLCD.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);
ecranLCD.cursor_on();
ecranLCD << "Ex d'un Menu";
ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE2);
ecranLCD << "Version 1.00";
delay(DELAI_MSG_DEBUT);
ecranLCD.clear(); // Effacer l'écran
ecranLCD << "Menu1 Menu2 Menu3";
ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE1);
ecranLCD.blink_on();
} // setup()
void loop() {
static optionMenu choixMenu = menu1;
static unsigned long compteurBouton = 0;
int etatBouton = digitalRead(BOUTON);
if ( etatBouton == HIGH) {
delay(BOUTON_DELAI_REBOND);
while (digitalRead(BOUTON)) ;
delay(BOUTON_DELAI_REBOND);
compteurBouton++;
// Calculer le choix menu en fonction du reste d'une division par trois (3)
// Note: Il y a trois options au Menu.
choixMenu = compteurBouton % 3;
#ifdef DEBUG
Serial << "\nChoix menu = " << choixMenu;
#endif
// Afficher le choix courant sur le LCD
ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE3);
ecranLCD << MSG_CHOIX_MENU_SELECTIONNE << choixMenu+1;
// Déplacer le curseur du LCD en fonction de la sélection menu
switch (choixMenu) {
case menu1: ecranLCD.setCursor(MENU_POS_OPTION_1, LCD_POS_LIG_MENU);
break;
case menu2: ecranLCD.setCursor(MENU_POS_OPTION_2, LCD_POS_LIG_MENU);
break;
case menu3: ecranLCD.setCursor(MENU_POS_OPTION_3, LCD_POS_LIG_MENU);
break;
default: break; // ERREUR!!!
} // switch (choixMenu)
} // if
} // loop()
Le fichier projet.h:
/*****************************************/
#define UART_VITESSE 115200
#define BOUTON 2
#define BOUTON_DELAI_REBOND 5
#define DELAI_MSG_DEBUT 1000
#define LCD_DELAI 50
#define LCD_NB_LIGNE 2
#define LCD_NB_COLONNE 16
#define LCD_LIGNE1 0
#define LCD_LIGNE2 1
#define LCD_LIGNE3 2
#define LCD_PREMIERE_COLONNE 0
#define LCD_POSITION_COMPTEUR 10
#define LCD_ADRESSE_I2C 0x27
#define LCD_POS_COL_MENU 0
#define LCD_POS_LIG_MENU 0
#define MENU_POS_OPTION_1 LCD_POS_COL_MENU + 0
#define MENU_POS_OPTION_2 LCD_POS_COL_MENU + 6
#define MENU_POS_OPTION_3 LCD_POS_COL_MENU + 12
#define MSG_CHOIX_MENU_SELECTIONNE "Choix --> Menu"
/*****************************************/
enum optionMenu {
menu1,
menu2,
menu3
};
Le projet Wokwi est disponible ici