#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
int compteur =0; // Permet de compte le nombre de touche appuyée
char codeOk[5];
int compteurOk = 0;
int essais = 3;
const byte Ligne = 4; // 4 lignes sur le digicode
const byte Colonne = 4; // 4 colonnes sur le digicode
// Définit maintenant les symboles correspondant à chaque bouton
char hexaBouton[Ligne][Colonne] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char code[5]; // Contient les touches tapées par l'utilisateur
byte Ligne_Pins[Ligne] = {9, 8, 7, 6}; // Connecte la ligne du digicode
byte Colonne_Pins[Colonne] = {5, 4, 3, 2}; // Connecte la colonne du digicode
// Initialise la librairie avec nos paramètres (la taille de la matrice et symboles)
Keypad mon_keypad = Keypad( makeKeymap(hexaBouton), Ligne_Pins, Colonne_Pins, Ligne, Colonne);
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
void setup(){
pinMode(12,OUTPUT); // Moteur 1
pinMode(13,OUTPUT); // Moteur 2
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
}
void loop(){
char keypad_matrix = mon_keypad.getKey(); // Récupère la touche appuyée
if (keypad_matrix == '#'){
lcd.setCursor(0,0);
lcd.print("Bienvenue");
delay(3000);
lcd.setCursor(0,0);
lcd.print("Entrez code");
lcd.setCursor(0,1);
lcd.print("D=OK, A=Suppr");
}
if (keypad_matrix && keypad_matrix != '#'){ // Si une touche est appuyée / je devrais la mettre dans la boucle précédente et remplacer le "if" par un "while" / Ici on rentre un code pour verouiller la structure et le retenir
codeOk[compteurOk] =keypad_matrix; // Met la valeur dans la liste
compteurOk+=1; // Incrémente pour que l'on se déplace dans la liste des valeurs
if (keypad_matrix =='A'){// Si on appuie sur A, on réintialise les valeurs
compteurOk =0;
}
if (compteurOk == 5){
if (codeOk[4] == 'D'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Code validé");
//Verouiller / Je n'ai pas encore les moteurs
delay(1000);
while (!keypad_matrix){ // Ici on attend pour éviter de relancer le programme du début
delay(1);
}
code[compteur] =keypad_matrix; // Met la valeur dans la liste
compteur+=1; // Incrémente pour que l'on se déplace dans la liste des valeurs
if (keypad_matrix =='A'){ // Si on appuie sur A, on réintialise les valeurs
compteur=0;
}
if (compteur ==5){ // Si on a 4 valeurs, on vérifie si le code est bon sinon on remet le compteur à 0
if (code[0] == codeOk[0] && code[1] == codeOk[1] && code[2] == codeOk[2] && code[3] == codeOk[3] && code[4] =='D'){ // Si le code est bon
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Code bon");
lcd.setCursor(0,1);
lcd.print("Bonne journée");
// Déverouiller la structure
}
else{ // Si le code n'est pas bon
essais -= 1;
lcd.clear();
lcd.setCursor(0,0);
if (essais > 0){ // On teste les essais restants
lcd.print("essais restants"+String(essais, DEC));
}
else{
lcd.print("Antivol verouillé pour 1 min");
delay(60000);
}
}
}
compteur=0; // Rétablit le compteur à 0 si l'utilisateur veut retenter sa chance
}
}
}
}