#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include <Keypad.h>
#include <Servo.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
#define tempsdarret 75
#define ouvert 0
#define ferme 90
Servo monServomoteur;
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg =0;
String password="1876";
String Mdp="4253";
String tempPassword;
boolean activated = false; // État de l'alarme
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // État du mot de passe saisi pour arrêter l'alarme
boolean passChangeMode = false;
boolean passChanged = false;
LiquidCrystal_I2C lcd(0x27,16,2); // définit le type d'écran lcd 16 x 2
const byte ROWS = 4; //quatre rangs
const byte COLS = 4; //quatre colonnes
char keypressed;
//définir les symboles sur les boutons du clavier.
char keyMap[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //Brochage des rangées du clavier
byte colPins[COLS] = {18, 19, A0, A1}; //Brochage des colonnes du clavier
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
void setup() {
lcd.init(); // initialisation de l'afficheur
lcd.backlight();
pinMode(buzzer, OUTPUT); // Définir le buzzer comme une sortie
pinMode(trigPin, OUTPUT); // Définit la trigPin comme une sortie
pinMode(echoPin, INPUT); // Définit l'echoPin comme une entrée
monServomoteur.attach(36);
debut();
}
void loop() {
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("L'alarme sera");
lcd.setCursor(0,1);
lcd.print("activee dans");
int countdown = 9; // Compte à rebours de 9 secondes avant l'activation de l'alarme
while (countdown != 0) {
lcd.setCursor(13,1);
lcd.print(countdown);
countdown--;
tone(buzzer, 700, 100);
delay(1000);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Alarme activee");
tone(buzzer, 2000, 600);
initialDistance = getDistance();
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated == true){
currentDistance = getDistance() + 10;
if ( currentDistance < initialDistance) {
tone(buzzer, 1000); // Envoyer un signal sonore de 1KHz
lcd.clear();
enterPassword();
}
}
if (!alarmActivated) {
if (screenOffMsg == 0 ){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A - Activer");
lcd.setCursor(0,1);
lcd.print("B - Carte SD");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey();
if (keypressed =='A'){ //Si vous appuyez sur A, vous activez l'alarme
tone(buzzer, 1000, 200);
activateAlarm = true;
}
else if (keypressed =='B') {
lcd.clear();
int i=5;
tone(buzzer, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("Entrez le code");
lcd.setCursor(0,1);
lcd.print("Code>");
passChangeMode = true;
passChanged = true;
while(passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 9 || keypressed == '#') {
tempPassword = "";
i=5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Entrez le code");
lcd.setCursor(0,1);
lcd.print("Code>");
}
if ( keypressed == '*') {
i=1;
tone(buzzer, 2000, 100);
if (Mdp == tempPassword) {
monServomoteur.write(ouvert);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Blocage de la");
lcd.setCursor(0,1);
lcd.print("carte SD dans ");
int countdown = 20; // Compte à rebours de 20 secondes avant la fermeture de la boite à carte SD
while (countdown != 0) {
lcd.setCursor(14,1);
lcd.print(countdown);
countdown--;
tone(buzzer, 700, 100);
if (countdown <= 8) {
lcd.setCursor(15,1);
lcd.print(" ");
}
delay(1000);
}
tone(buzzer, 2000, 1000);
monServomoteur.write(ferme);
Mdp = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
void enterPassword() {
int k=5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Code>");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(k,1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k=5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Code>");
}
if ( keypressed == '*') {
if ( tempPassword == password ) {
activated = false;
alarmActivated = false;
noTone(buzzer);
screenOffMsg = 0;
}
else if (tempPassword != password) {
lcd.setCursor(0,1);
lcd.print("FAUX! Reesayez");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Code>");
}
}
}
}
void debut() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A");
delay(400);
lcd.clear();
delay(400);
lcd.setCursor(0, 0);
lcd.print("A");
delay(400);
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("A");
delay(tempsdarret);
lcd.setCursor(1, 0);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(2, 0);
lcd.print("D");
delay(tempsdarret);
lcd.setCursor(3, 0);
lcd.print("U");
delay(tempsdarret);
lcd.setCursor(4, 0);
lcd.print("I");
delay(tempsdarret);
lcd.setCursor(5, 0);
lcd.print("N");
delay(tempsdarret);
lcd.setCursor(6, 0);
lcd.print("O");
delay(tempsdarret);
lcd.setCursor(8, 0);
lcd.print("S");
delay(tempsdarret);
lcd.setCursor(9, 0);
lcd.print("E");
delay(tempsdarret);
lcd.setCursor(10, 0);
lcd.print("C");
delay(tempsdarret);
lcd.setCursor(11, 0);
lcd.print("U");
delay(tempsdarret);
lcd.setCursor(12, 0);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(13, 0);
lcd.print("I");
delay(tempsdarret);
lcd.setCursor(14, 0);
lcd.print("T");
delay(tempsdarret);
lcd.setCursor(15, 0);
lcd.print("Y");
delay(tempsdarret);
lcd.setCursor(0, 1);
lcd.print("C");
delay(tempsdarret);
lcd.setCursor(1, 1);
lcd.print("O");
delay(tempsdarret);
lcd.setCursor(2, 1);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(3, 1);
lcd.print("P");
delay(tempsdarret);
lcd.setCursor(4, 1);
lcd.print("O");
delay(tempsdarret);
lcd.setCursor(5, 1);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(6, 1);
lcd.print("A");
delay(tempsdarret);
lcd.setCursor(7, 1);
lcd.print("T");
delay(tempsdarret);
lcd.setCursor(8, 1);
lcd.print("I");
delay(tempsdarret);
lcd.setCursor(9, 1);
lcd.print("O");
delay(tempsdarret);
lcd.setCursor(10, 1);
lcd.print("N");
delay(tempsdarret);
lcd.setCursor(12, 1);
lcd.print("V");
delay(tempsdarret);
lcd.setCursor(13, 1);
lcd.print("1");
delay(tempsdarret);
lcd.setCursor(14, 1);
lcd.print(".");
delay(tempsdarret);
lcd.setCursor(15, 1);
lcd.print("0");
delay(1000);
tone(buzzer, 1000);
delay(250);
noTone(buzzer);
delay(250);
tone(buzzer, 1000);
delay(250);
noTone(buzzer);
delay(250);
tone(buzzer, 1000);
delay(250);
noTone(buzzer);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("L");
delay(400);
lcd.clear();
delay(400);
lcd.setCursor(2, 0);
lcd.print("L");
delay(400);
lcd.clear();
delay(500);
lcd.setCursor(2, 0);
lcd.print("L");
delay(tempsdarret);
lcd.setCursor(3, 0);
lcd.print("A");
delay(tempsdarret);
lcd.setCursor(4, 0);
lcd.print("N");
delay(tempsdarret);
lcd.setCursor(5, 0);
lcd.print("C");
delay(tempsdarret);
lcd.setCursor(6, 0);
lcd.print("E");
delay(tempsdarret);
lcd.setCursor(7, 0);
lcd.print("M");
delay(tempsdarret);
lcd.setCursor(8, 0);
lcd.print("E");
delay(tempsdarret);
lcd.setCursor(9, 0);
lcd.print("N");
delay(tempsdarret);
lcd.setCursor(10, 0);
lcd.print("T");
delay(tempsdarret);
lcd.setCursor(12, 0);
lcd.print("D");
delay(tempsdarret);
lcd.setCursor(13, 0);
lcd.print("E");
lcd.setCursor(0, 1);
lcd.print("A");
delay(tempsdarret);
lcd.setCursor(1, 1);
lcd.print("L");
delay(tempsdarret);
lcd.setCursor(2, 1);
lcd.print("A");
delay(tempsdarret);
lcd.setCursor(3, 1);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(4, 1);
lcd.print("M");
delay(tempsdarret);
lcd.setCursor(5, 1);
lcd.print("Y");
delay(tempsdarret);
lcd.setCursor(7, 1);
lcd.print("S");
delay(tempsdarret);
lcd.setCursor(8, 1);
lcd.print("E");
delay(tempsdarret);
lcd.setCursor(9, 1);
lcd.print("C");
delay(tempsdarret);
lcd.setCursor(10, 1);
lcd.print("U");
delay(tempsdarret);
lcd.setCursor(11, 1);
lcd.print("R");
delay(tempsdarret);
lcd.setCursor(12, 1);
lcd.print("I");
delay(tempsdarret);
lcd.setCursor(13, 1);
lcd.print("T");
delay(tempsdarret);
lcd.setCursor(14, 1);
lcd.print("Y");
delay(3000);
}
// Fonction personnalisée pour le capteur à ultrasons
long getDistance(){
//int i=10;
//while( i<=10 ) {
// Efface le trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Met la trigPin sur l'état HIGH pendant 10 micro secondes
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lit l'echoPin, renvoie le temps de parcours de l'onde sonore en microsecondes.
duration = pulseIn(echoPin, HIGH);
// Calcul de la distance
distance = duration*0.034/2;
//sumDistance += distance;
//}
//int averageDistance= sumDistance/10;
return distance;
}