1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
| #include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
// librairie pour la gestion de mots de passe
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
// librairie pour le clavier
//*************************************************
#define Ld_cd_OK 14 // broche de la led verte (alarme désactivée)
#define Ld_Al_Fonct 16 // broche de la led Rouge (Defaut détecté = clignotement et en transmission SMS = Fixe)
#define Ld_cd_Non_OK 15 // broche de la led bleu (Code NON OK)
#define Det_IR 17 //broche de l'entrée du détectyeur IR
#define Rel_Trans_GSM 18 // broche du relai de transmission GSM
int Etat_Ld_Al_Fonct = 0; // Variable qui aura comme valeur l'état de la led alarme en fonctionnement
int Etat_IR ; // variable qui aura comme valeur l'état de l'entrée du détecteur IR
int Val_IR = 0; //Variable qui dit aura comme valeur l'état de la led rouge (détection d'une alarme) et qui gardera cette valeur tant que un code correct n'a pas été introduit
unsigned long timer_IR = 0; // définition des variables temps (Timer pour detection IR)
unsigned long temps = 0; // définition des variables temps (partie clavier)
long touche;
boolean bleu;
Password password = Password( "4501" ); // 1er mot de passe exemples ici arbitraires, on peut très bien choisir des mots de passe plus long
Password password2 = Password( "5521" ); // 2e mot de passe
Password password3 = Password ("8910"); // 3e mot de passe
const byte ROWS = 4; // clavier à 4 lignes
const byte COLS = 3; //clevier à 3 colonnes
char keys[ROWS][COLS] = {
{
'1','2','3' }
, //définitioon du clavier, touche par touche
{
'4','5','6' }
,
{
'7','8','9' }
,
{
'*','0','#' }
};
byte colPins[COLS] = {
6,7,8}; //numéro des ports connectés aux lignes
byte rowPins[ROWS] = {
2,3,4,5}; //numéro des ports connectés aux colonnes du clévier
// création du clavier
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//___________________________________________________________________________________________________________________________
void setup(){ // void setup est l'initialisation
keypad.addEventListener(keypadEvent); //ajout d'un évènement qui écoute le clavier, il regarde si une touche est appuyée
pinMode(Ld_cd_OK, OUTPUT); // définition de la pins sortie de la led bleu
pinMode(Ld_Al_Fonct, OUTPUT); // définition de la pins sortie de la led rouge
pinMode(Ld_cd_Non_OK,OUTPUT); // définition de la pins sortie de la led rouge
pinMode(Rel_Trans_GSM,OUTPUT); //définition de la pin de la sortie du relai transmission GSM
pinMode (Det_IR, INPUT); // définition de la pin entrée du détecteur infra rouge
digitalWrite(Rel_Trans_GSM,LOW); //On coupe le relai de transmission GSM
digitalWrite(Ld_Al_Fonct,LOW); // On coupe la led rouge led alarme fonctionnement
digitalWrite(Ld_cd_Non_OK,LOW); // On coupe la led bleu code non OK
digitalWrite(Ld_cd_OK,LOW); // On coupe la led verte code OK
bleu = 0; // veriable pour l'activation ou désactivation de la led bleu
}
//___________________________________________________________________________________________________________________________
void loop()
{
// Code pour la temporisation de retard à l'enclenchement de la transmission GSM lors de l'entrée (après détection du détecteur IR) (Le problème se trouve probablement ici)
//_________________________________________________________________________________________________________________________________
Etat_IR = digitalRead(Det_IR); //On attribue la valeur de la variable Etat_IR en lisant l'entrée Dét_IR
if ( Etat_IR == 1) // Si détection alors Etat_IR = 1
{
Val_IR = 1; //
}
if (Val_IR == 1)
{
digitalWrite(Ld_Al_Fonct,HIGH);//OK
if ((millis() - timer_IR) > 15000) // temps au bout duquel on supprime les numéros composés si le mot de passe n'est pas bon //OK
{
timer_IR = millis(); // on prend le temps //OK
digitalWrite(Rel_Trans_GSM,HIGH); // on eteind la led bleu //OK
}
}
// Code pour la partie clavier et contrôle du mots de passe (fonctionne correctement)
//________________________________________________________________________________________________________________________________________
keypad.getKey();
if ((millis() - temps) > 10000) // temps au bout duquel on supprime les numéros composés si le mot de passe n'est pas bon
{
temps = millis(); // on prend le temps
digitalWrite(Ld_cd_Non_OK,LOW); // on eteind la led bleu
password.reset(); //on oublie les touches composées, stockées dans le comparateur avec le premier mot de passe
password2.reset(); // pareil avec le second
password3.reset(); // et le troisième
bleu = 0; // on demande que la LED soit éteinte
}
}
//take care of some special events
void keypadEvent(KeypadEvent eKey){ // fonction de lecture des touches appuyées
temps = millis(); // on prend le temps
switch (keypad.getState()){
case PRESSED: // si une touche est pressés
switch (eKey){
case '*':
checkPassword();
break; // si c'est la touche *, on sort de la fonction
case '#': // si c'est le #, on réinitialise le mot de passe et on demande l'activation de la led en blanc
password.reset(); // On reset le Password
password2.reset(); // On reset le Password 2
password3.reset(); // On reste le Password 3
if(bleu==1){ // si la variable blanc = 1 , on etein led Led bleu
digitalWrite(Ld_cd_Non_OK,LOW);//On éteint la led bleu
bleu=0;
}
break;
default:
password.append(eKey); // pour toutes les autres touches, on les stocke dans les variables qui les compareront aux bons mot de passes
password2.append(eKey);
password3.append(eKey);
digitalWrite(Ld_cd_OK,LOW); // on eteind la led verte code OK
}
}
}
void checkPassword(){ // fonction de vérification du des mots de passes
temps = millis(); // on prend le temps
if (password.evaluate()||password2.evaluate()||password3.evaluate()){ // si un des 3 mots de passe correspond
digitalWrite(Ld_Al_Fonct,LOW); // rouge éteinte
digitalWrite(Ld_cd_OK,HIGH); // verte allumée
digitalWrite(Rel_Trans_GSM,LOW); // on coupe la transmission GSM
digitalWrite(Ld_cd_Non_OK,LOW); // on coupe la led bleu code non OK
Etat_Ld_Al_Fonct = 0; // On remet la variable Etat_ld_Al_Fonct à 0
Val_IR = 0; //On remet la variable Val_IR à 0
delay(2000); // temps d'allumage led verte
digitalWrite(Ld_cd_OK,LOW); //vert éteint
password.reset(); //on supprime les 3 mots de passe des variables de comparaison
password2.reset();
password3.reset();
//Add code to run if it works
}
else{ // si le mot de passe n'est pas le bon
digitalWrite(Ld_cd_OK,LOW);
digitalWrite(Ld_cd_Non_OK,HIGH); // on allume la led rouge
bleu=!bleu; // on change la variable bleu
}
} |