#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
const int buzzerPin = 10;
enum State { MENU_PRINCIPAL, CONTACTS, MESSAGERIE, PARAMETRE, MUSIQUE, AJOUTER_CONTACT, SUPPRIMER_CONTACT };
State currentState = MENU_PRINCIPAL;
bool addingContact = false;
bool deletingContact = false;
int menuPosition = 0; // Position du menu défilant
int contactsMenuPosition = 0; // Position du menu Ajouter/Supprimer contact
void setup() {
lcd.init();
lcd.backlight();
pinMode(buzzerPin, OUTPUT);
}
void loop() {
switch (currentState) {
case MENU_PRINCIPAL:
displayMenu("Menu principal");
break;
case CONTACTS:
handleContacts();
break;
case AJOUTER_CONTACT:
ajouterContact();
break;
case SUPPRIMER_CONTACT:
supprimerContact();
break;
case MESSAGERIE:
displayMenu("Messagerie");
break;
case PARAMETRE:
displayMenu("Parametres");
break;
case MUSIQUE:
displayMenu("Musique");
break;
}
}
void displayMenu(String title) {
String menuText = "1. Contacts 2. Messagerie 3. Parametres 4. Musique ";
int menuTextLength = menuText.length();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(title);
lcd.setCursor(0, 1);
// Afficher le menu en commençant par la position actuelle
for (int i = 0; i < 16; i++) {
lcd.print(menuText[(menuPosition + i) % menuTextLength]);
}
delay(250); // Définir la vitesse de défilement
// Mettre à jour la position du menu pour le défilement
menuPosition = (menuPosition + 1) % menuTextLength;
char key = keypad.getKey();
if (key == '1') {
currentState = CONTACTS;
} else if (key == '2') {
currentState = MESSAGERIE;
} else if (key == '3') {
currentState = PARAMETRE;
} else if (key == '4') {
currentState = MUSIQUE;
} else if (key != NO_KEY) {
// Afficher un message d'erreur pour une touche invalide
lcd.clear();
lcd.print("Touche invalide");
delay(2000);
}
}
void handleContacts() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Contacts");
String menuText = "1. Ajouter 2. Supprimer";
int menuTextLength = menuText.length();
lcd.setCursor(0, 1);
// Afficher le menu Ajouter/Supprimer en commençant par la position actuelle
for (int i = 0; i < 16; i++) {
lcd.print(menuText[(contactsMenuPosition + i) % menuTextLength]);
}
delay(250); // Définir la vitesse de défilement
// Mettre à jour la position du menu Ajouter/Supprimer pour le défilement
contactsMenuPosition = (contactsMenuPosition + 1) % menuTextLength;
char key = keypad.getKey();
if (key == '1') {
currentState = AJOUTER_CONTACT;
} else if (key == '2') {
currentState = SUPPRIMER_CONTACT;
} else if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}
void ajouterContact() {
// Logique pour ajouter un contact
lcd.clear();
lcd.print("Ajouter un contact...");
char key = keypad.getKey();
if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}
void supprimerContact() {
// Logique pour supprimer un contact
lcd.clear();
lcd.print("Supprimer un contact...");
char key = keypad.getKey();
if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}
void handleMessagerie() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("essagerie");
// Afficher le menu spécifique à la messagerie sur la deuxième ligne si nécessaire
char key = keypad.getKey();
if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}
void handleParametre() {
// Logique pour gérer les paramètres
lcd.clear();
lcd.print("Parametres");
// Afficher le menu spécifique aux paramètres sur la deuxième ligne si nécessaire
char key = keypad.getKey();
if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}
void handleMusique() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gestion de la musique");
// Afficher le menu spécifique à la musique sur la deuxième ligne si nécessaire
char key = keypad.getKey();
if (key == '#') {
currentState = MENU_PRINCIPAL; // Retour au menu principal lorsque # est pressé
}
}