#include <LiquidCrystal.h>
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
#define tempsdarret 75
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg =0;
String password="8837";
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;
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, 20, 21}; //Brochage des colonnes du clavier
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Crée un objet LC. Paramètres : (rs, enable, d4, d5, d6, d7)
void setup() {
lcd.begin(16,2);
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
}
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("Alarme off");
lcd.setCursor(0,1);
lcd.print("A - Activer");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey();
if (keypressed =='A'){ //Si vous appuyez sur A, vous activez l'alarme
tone(buzzer, 1000, 200);
activateAlarm = true;
}
keypressed = myKeypad.getKey();
if (keypressed =='2'){ //Si vous appuyez sur A, vous activez l'alarme
#include "pitches.h"
//notes in the melody:
int melody[] = {
NOTE_D5, NOTE_CS5, NOTE_B4, NOTE_FS4,
NOTE_FS4, NOTE_FS4, NOTE_FS4, NOTE_FS4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_G4,
NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_CS5, NOTE_D5, NOTE_A4,
NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_CS4,
0,
NOTE_D5, NOTE_CS5, NOTE_B4, NOTE_FS4,
NOTE_FS4, NOTE_FS4, NOTE_FS4, NOTE_FS4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_G4,
NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_CS5, NOTE_D5, NOTE_A4,
NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_CS4,
};
// note durations: 4 = quarter note, 8 = eighth note, etc
int noteDurations[] = {
2, 2, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 2,
8,
2, 2, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 2,
};
//iterate over the notes of the melody:
for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
/*
to calculate the note duration, take one second divided by the note type.
e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
*/
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
/*
to distinguish the notes, set a minimum time between them.
the note's duration + 30% seems to work well:
*/
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(8); //stop the tone playing:
}
digitalWrite(8,LOW);
}
keypressed = myKeypad.getKey();
if (keypressed =='1'){ //Si vous appuyez sur A, vous activez l'alarme
int BuzzerPin = 8; // Connect Buzzer to Arduino pin 11
int Si2 =1975;
int LaS2=1864;
int La2= 1760;
int SolS2=1661;
int Sol2=1567;
int FaS2=1479;
int Fa2= 1396;
int Mi2= 1318;
int ReS2=1244;
int Re2= 1174;
int DoS2=1108;
int Do2= 1046;
// Low Octave
int Si = 987;
int LaS= 932;
int La = 880;
int SolS=830;
int Sol= 783;
int FaS= 739;
int Fa= 698;
int Mi= 659;
int ReS= 622;
int Re = 587;
int DoS =554;
int Do = 523;
// define the notes
int rounda=0;
int roundp=0;
int white= 0;
int whitep=0;
int black=0;
int blackp=0;
int quaver=0;
int quaverp =0;
int semiquaver=0;
int semiquaverp=0;
int bpm= 120;
pinMode(BuzzerPin,OUTPUT);
black= 35000/bpm;
blackp=black*1.5;
white= black*2;
whitep=white*1.5;
rounda= black*4;
roundp= rounda*1.5;
quaver= black/2;
quaverp=quaver*1.5;
semiquaver= black/4;
semiquaverp=semiquaver*1.5;
tone(BuzzerPin,Mi,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(black+50);
tone(BuzzerPin,Si,black);
delay(black+50);
tone(BuzzerPin,Do2,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(2*white+50);
tone(BuzzerPin,Mi,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(black+50);
tone(BuzzerPin,Si,black);
delay(black+50);
tone(BuzzerPin,Do2,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(2*white+50);
tone(BuzzerPin,Mi,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(black+50);
tone(BuzzerPin,Si,black);
delay(black+50);
tone(BuzzerPin,Do2,white*1.3);
delay(2*black+50);
tone(BuzzerPin,Si,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(black+50);
tone(BuzzerPin,Do2,white*1.3);
delay(2*black+50);
tone(BuzzerPin,Si,black);
delay(black+50);
tone(BuzzerPin,La,black);
delay(black+50);
tone(BuzzerPin,Mi2,black);
delay(white+50);
tone(BuzzerPin,Mi2,black);
delay(white+100);
tone(BuzzerPin,Mi2,black);
delay(white+50);
tone(BuzzerPin,Re2,black);
delay(black+50);
tone(BuzzerPin,Mi2,black);
delay(black+50);
tone(BuzzerPin,Fa2,black);
delay(black+50);
tone(BuzzerPin,Fa2,white*1.3);
delay(rounda+100);
tone(BuzzerPin,Fa2,black);
delay(black+50);
tone(BuzzerPin,Mi2,black);
delay(black+50);
tone(BuzzerPin,Re2,black);
delay(black+50);
tone(BuzzerPin,Fa2,black);
delay(black+50);
tone(BuzzerPin,Mi2,white*1.3);
delay(rounda+100);
tone(BuzzerPin,Mi2,black);
delay(black+50);
tone(BuzzerPin,Re2,black);
delay(black+50);
tone(BuzzerPin,Do2,black);
delay(black+50);
tone(BuzzerPin,Si,white*1.3);
delay(white+50);
tone(BuzzerPin,Mi2,white*1.3);
delay(white+50);
tone(BuzzerPin,Si,white*1.3);
delay(white+50);
tone(BuzzerPin,Do2,white*1.3);
delay(white+50);
tone(BuzzerPin,La,rounda*1.3);
delay(rounda+50);
}
else if (keypressed =='B') {
lcd.clear();
int i=1;
tone(buzzer, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("Code Actuel");
lcd.setCursor(0,1);
lcd.print(">");
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 > 5 || keypressed == '#') {
tempPassword = "";
i=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Code Actuel");
lcd.setCursor(0,1);
lcd.print(">");
}
if ( keypressed == '*') {
i=1;
tone(buzzer, 2000, 100);
if (password == tempPassword) {
tempPassword="";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Nouveau Code");
lcd.setCursor(0,1);
lcd.print(">");
while(passChangeMode) {
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 > 5 || keypressed == '#') {
tempPassword = "";
i=1;
tone(buzzer, 2000, 100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Nouveau Code");
lcd.setCursor(0,1);
lcd.print(">");
}
if ( keypressed == '*') {
i=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Chargement");
lcd.setCursor(10,0);
lcd.print(".");
delay(500);
lcd.setCursor(11,0);
lcd.print(".");
delay(500);
lcd.setCursor(12,0);
lcd.print(".");
delay(500);
lcd.setCursor(10,0);
lcd.print(" ");
lcd.setCursor(11,0);
lcd.print(" ");
lcd.setCursor(12,0);
lcd.print(" ");
delay(500);
lcd.setCursor(10,0);
lcd.print(".");
delay(500);
lcd.setCursor(11,0);
lcd.print(".");
delay(500);
lcd.setCursor(12,0);
lcd.print(".");
delay(500);
lcd.setCursor(10,0);
lcd.print(" ");
lcd.setCursor(11,0);
lcd.print(" ");
lcd.setCursor(12,0);
lcd.print(" ");
delay(500);
lcd.setCursor(10,0);
lcd.print(".");
delay(500);
lcd.setCursor(11,0);
lcd.print(".");
delay(500);
lcd.setCursor(12,0);
lcd.print(".");
delay(1000);
lcd.clear();
delay(1000);
password = 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>");
}
}
}
}
// 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;
}