#include <Servo.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
Servo myservo;
int pos=0;
int Led_red=13 ;
int Led_green=12 ;
const byte ROW_NUM = 4; // quatre rangées
const byte COLUMN_NUM = 4; // quatre colonnes
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // connectez les broches du clavier à ces broches, dans l'ordre
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C et dimensions du LCD (changez selon votre écran)
void setup() {
pinMode(Led_red , OUTPUT);
pinMode(Led_green , OUTPUT);
myservo.attach(10);// put your setup code here, to run once:
lcd.begin(16,2);
lcd.print("Entrez le code:");
}
void loop() {
char code[5]; // Tableau pour stocker le code saisi
int codeIndex = 0; // Index actuel dans le tableau
digitalWrite(Led_red, HIGH); // Allume la LED rouge à chaque itération
while (codeIndex < 4) {
char key = keypad.getKey();
if (key) {
lcd.clear();
lcd.print("Code saisi: ");
lcd.setCursor(0, 1);
// Affiche le code saisi sur l'écran
for (int i = 0; i <= codeIndex; i++) {
lcd.print('*');
}
code[codeIndex] = key;
codeIndex++;
delay(500);
}
}
code[4] = '\0'; // Assurez-vous de terminer la chaîne avec un caractère nul
// Vérifie si le code est correct
if (checkCode(code)) {
lcd.clear();
lcd.print("Code correct!");
digitalWrite(Led_green, HIGH); // Allume la LED verte si le code est correct
unlockDoor();
delay(10);
} else {
lcd.clear();
lcd.print("Code incorrect!");
delay(10);
}
delay(2000); // Attendez un moment avant de revenir à la saisie du code
lcd.clear();
lcd.print("Entrez le code:");
digitalWrite(Led_green, LOW); // Allume la LED verte si le code est correct
}
bool checkCode(const char* enteredCode) {
return strcmp(enteredCode, "1234") == 0; // Comparaison avec le code attendu
}
void unlockDoor() {
myservo.write(90); // Déverrouiller la porte
delay(2000);
myservo.write(0); // Revenir à la position initiale
}
void alumer() {
analogWrite(Led_red,HIGH);
}