| 12
 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
 
  }
} | 
Partager