//Yassinos
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
const byte ROWS = 4; // Quatre lignes du clavier
const byte COLS = 4; // Quatre colonnes du clavier
//clavier
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte colPins[COLS] = { 5, 4, 3, 2 }; //Pins connected to C1, C2, C3, C4
byte rowPins[ROWS] = { 9, 8, 7, 6 }; //Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); //Adresse I2C de l'écran LCD et dimensions (16x2)
const char codeCorrect[] = "1201"; //Code correct
const int codeLength = 4;
char enteredCode[codeLength + 1] = ""; // +1 pour la terminateur nul
//LEDS
const int LedRed = 12;
const int LedGreen = 13;
//Servo
Servo myservo;
void setup() {
lcd.begin(16, 2); // Initialisation de l'écran LCD
pinMode(LedRed, OUTPUT);
pinMode(LedGreen, OUTPUT);
myservo.attach(11);
lcd.print("Yassinos...");
delay(1000);
lcd.clear();
lcd.print("Entrez le code:");
}
void loop() {
// Code pour lire le clavier et obtenir la valeur de key
char key = keypad.getKey();
if (key ) {
enteredCode[strlen(enteredCode)] = key;
// Afficher le chiffre entré sur l'écran LCD.
for (int i = 0; i < strlen(enteredCode); i++) {
lcd.setCursor(i, 1);
lcd.print("*");
}
// Allimer LED rouge apres le click de clavier
digitalWrite(LedRed, HIGH);
delay(100); // Ajout d'une petite pause entre chaque chiffre.
digitalWrite(LedRed, LOW);
}
// Vérifier si enteredCode est égal au code correct.
if (strlen(enteredCode) == codeLength) {
//int strncmp(const char*, const char*, size_t) : compare les premiers n caractères de deux chaînes
if (strncmp(enteredCode, codeCorrect, codeLength) == 0) {
// Afficher "Code correct" sur l'écran LCD et allumer LED Verte
digitalWrite(LedGreen, HIGH);
afficherSurLCD("Code correct");
// le servomoteur doit être déverrouillé à un angle de 180 degrés lorsqu'un code correct est saisi.
myservo.write(180); // Angle de rotation du servomoteur pour le déverrouillage.
delay(5000);
myservo.write(90);//position initial de ce servo 90 degrés pour le verrouillage.
digitalWrite(LedGreen, LOW);
afficherSurLCD("Entrez le code:");
resetEnteredCode(); // Réinitialiser le code.
} else {
// Afficher "Code incorrect" sur l'écran LCD.
afficherSurLCD("Code incorrect");
delay(1000);
afficherSurLCD("Entrez le code:");
resetEnteredCode(); // Réinitialiser le code.
}
}
}
//resetEnteredCode qui parcourt le tableau enteredCode et lui attribue la valeur '\0'
void resetEnteredCode() {
for (int i = 0; i < codeLength + 1; i++) {
enteredCode[i] = '\0';
}
}
void afficherSurLCD(const char* message) {
// Effacer l'écran LCD.
lcd.clear();
// Afficher le message sur la première ligne de l'écran LCD.
lcd.setCursor(0, 0);
lcd.print(message);
}