/* ------------------------COFFRE FORT
Clavier 4x4 : Chaque touche appuyée est lue par l’Arduino et ajoutée à une chaîne de caractères enteredCode.
Validation du code : Si l'utilisateur appuie sur #, le code entré est comparé au code correct.
Si le code est correct, le servomoteur bouge pour déverrouiller.
Si le code est incorrect, le buzzer émet un son pour signaler l'erreur.
Bouton de réinitialisation (*) : Permet de réinitialiser le code entré.
Détection de l'état du coffre :
Si le coffre est déjà ouvert et que l'utilisateur entre le code correct à nouveau, la fonction verrouillerCoffre() est appelée pour fermer le coffre.
Si le coffre est fermé, le code correct déverrouille le coffre avec la fonction unlockCoffre().
Cela permet de verrouiller et déverrouiller le coffre avec le même code, selon son état actuel.
--------------------------CONNECTIONS
Clavier 4x4 (Keypad) :
R1 → D4
R2 → D5
R3 → D6
R4 → D7
C1 → D8
C2 → D9
C3 → D10
C4 → D11
Servomoteur :
Signal → D5
VCC → 5V
GND → GND
LEDS :
LED ROUGE : D2
LED VERTE : D3
*/
#include <Keypad.h>
#include <Servo.h>
// Configuration du clavier 4x4
const byte ROWS = 4; // 4 rangées
const byte COLS = 4; // 4 colonnes
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {4, 6, 7, 8}; // Connexion des lignes du keypad aux pins D2-D5
byte colPins[COLS] = {9, 10, 11, 12}; // Connexion des colonnes du keypad aux pins D6-D9
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Code correct à entrer
String correctCode = "123AD";
String enteredCode = "";
// Configuration du servomoteur et du buzzer
Servo myServo;
int servoPin = 5; // Pin du servomoteur
bool coffreOuvert = false; // Variable pour suivre l'état du coffre
void unlockCoffre();
void verrouillerCoffre() ;
void setup() {
Serial.begin(9600); // Initialisation de la communication série
pinMode (2, OUTPUT); // Led Rouge sur broche 2
pinMode(3, OUTPUT); // Led Verte sur broche 3
myServo.attach(servoPin); // Initialisation du servomoteur sur la pin D10
verrouillerCoffre(); // Verrouiller le coffre au démarrage
}
void loop() {
char key = keypad.getKey(); // Lire la touche pressée
if (key) {
if (key == '#') { // '#' est utilisé pour vérifier le code entré
if (enteredCode == correctCode) {
Serial.println("Code correct");
unlockCoffre(); // Déverrouiller si le coffre est fermé
}
else {
Serial.println("Code incorrect");
}
if (enteredCode != correctCode) {
verrouillerCoffre();}
enteredCode = ""; // Réinitialiser le code entré après vérification
}
else if (key == '*') { // '*' est utilisé pour effacer l'entrée
enteredCode = "";
Serial.println("Code réinitialisé");
} else {
enteredCode += key; // Ajouter la touche pressée au code entré
Serial.println("Code actuel: " + enteredCode);
}
}
}
// Fonction pour déverrouiller le coffre
void unlockCoffre() {
myServo.write(90); // Tourner le servomoteur pour déverrouiller (angle 90)
coffreOuvert = true; // Marquer le coffre comme ouvert
Serial.println("Coffre déverrouillé.");
digitalWrite(3,HIGH);
digitalWrite(2, LOW);
}
// Fonction pour verrouiller le coffre
void verrouillerCoffre() {
myServo.write(0); // Retourner à la position verrouillée (angle 0)
coffreOuvert = false; // Marquer le coffre comme fermé
Serial.println("Coffre verrouillé.");
digitalWrite(2,HIGH);
digitalWrite(3, LOW);
}