#include <Keypad.h>
const byte ROWS = 4; // Nombre de lignes du pavé numérique
const byte COLS = 3; // Nombre de colonnes du pavé numérique
//const int ledPin = 13; // pour l'éteindre au démarrage
// Définir les broches du pavé numérique
byte rowPins[ROWS] = {6,5,4,3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {2,1,0}; //connect to the column pinouts of the keypad
// de gauche à droite le câblage obligatoire du pavé est: entrée 1,6,2,3,0,4,5
// Définir les touches du pavé numérique
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
// Créer un objet Keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Code à 4 chiffres à saisir
const int codeLength = 4;
char enteredCode[codeLength + 1]; // +1 pour stocker le caractère de fin de chaîne '\0'
char correctCode[] = "1234"; // Code correct à 4 chiffres (à personnaliser)
// Broche du buzzer ou du haut-parleur
const int buzzerPin = 7;
// Broche du relais qui commande la serrure (ici une LED)
const int LockPin = 13;
// Notes pour jouer le bip court
int beepNote = 440;
int beepDuration = 50; // Durée du bip court en ms
void setup() {
// pinMode(ledPin, OUTPUT);
// digitalWrite(ledPin, LOW); // éteind la LED 13 au démarrage
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW); // Initialiser le buzzer/haut-parleur à l'état bas (éteint)
pinMode(LockPin, OUTPUT);
digitalWrite(LockPin, LOW); // Initialiser la serrure au niveau bas
}
void loop() {
static byte currentIndex = 0;
char key = keypad.getKey();
if (key) {
tone(buzzerPin, beepNote, beepDuration); // Émettre un bip court pour chaque touche pressée
if (key == '#') {
// si le code est correcte
if (strcmp(enteredCode, correctCode) == 0) {
tone(buzzerPin, 880, 800); // Émettre 1 bip long de 880Hz durant 800ms pour signaler un code correct
digitalWrite(LockPin, HIGH); // active la serrure
delay(3000); // Laisse l'alimentation à l'état haut durant 3000 ms
digitalWrite(LockPin, LOW); // désactive la serrure
}
// si le code est incorrecte
else {
tone(buzzerPin, 220, 800); // Émettre 1 bip long de 220Hz durant 800ms si le code est incorrecte
}
currentIndex = 0; // Réinitialiser l'index pour la prochaine saisie
memset(enteredCode, 0, sizeof(enteredCode)); // Réinitialiser le tableau du code
}
else {
if (currentIndex < codeLength) {
enteredCode[currentIndex++] = key;
}
}
}
}