[TUTORIEL] Matrix Keypad

Forum dédié aux produits Adafruit

[TUTORIEL] Matrix Keypad

Message non lude Laetitia » Ven 14 Sep 2012 17:09

Bonjour,

Voici un exemple d'utilisation du Matrix Keypad : un mini-système d'alarme géré par un mot de passe à quatre chiffres.

Les touches * et # du clavier permettent respectivement de valider le mot de passe et annuler la saisie en cours. En cas de mot de passe erroné, l'alarme se met en route jusqu'à ce que le bon mot de passe soit à nouveau rentré.
Les deux LEDs simulent le fonctionnement de l'alarme.

- MATÉRIEL -

- Arduino Uno (x1)
- Matrix Keypad (x1)
- LEDs 10mm (x2)
- Résistances 150 Ohms (x2)

- Librairie Password
- Librairie Keypad

- SCHÉMA DU MONTAGE -

Schéma_Matrix_Keypad.png
Schéma_Matrix_Keypad.png (243.61 Kio) Vu 10676 fois


- CODE -

Code: Tout sélectionner
/*
  Mini système d'alarme - Matrix Keypad + LEDs
  Arduino IDE 1.0.1
*/

#include <Password.h> // http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h>   // http://www.arduino.cc/playground/uploads/Code/keypad.zip

#define green 12                   // LED rouge attachée à pin 12 de l'Arduino
#define red 13                     // LED verte attachée à pin 13 de l'Arduino

Password pwd = Password("1234");   // définition du mot de passe

boolean alarm = false;             // variable stockant l'état de l'alarme
                                   // false = alarme OFF | true = alarme ON
boolean intruder = false;          // variable stockant l'état de l'intrusion
                                   // false = pas d'intrus détecté | true = intrus détecté
                                 
unsigned long previousMillis = 0;  // dernière fois que la LED rouge a clignoté
int interval = 250;                // intervalle auquel faire clignoter la LED

#define ROWS 4                                                       //
#define COLS 3                                                       //
char keys[ROWS][COLS] =                                              //
{                                                                    //
  {'1','2','3'},                                                     //
  {'4','5','6'},                                                     // configuration
  {'7','8','9'},                                                     // du clavier
  {'*','0','#'}                                                      //
};                                                                   //
byte rowPins[ROWS] = {8, 7, 6, 5};                                   //
byte colPins[COLS] = {4, 3, 2};                                      //
                                                                     //
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //

void setup()
{
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
 
  kpd.addEventListener(kpdEvent);
}

void loop()
{
  char Key = kpd.getKey();
  // en cas d'intrus détecté :
  if(intruder == true && alarm == true)
  {
    unsigned long currentMillis = millis();
    // ... on regarde s'il est temps de faire clignoter la LED, c'est-à-dire
    // s'il s'est passé suffisamment de temps depuis la dernière fois qu'on a vérifié
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      digitalWrite(red, !digitalRead(red));
    }
  }
  else
  {
    digitalWrite(red, LOW);
  }
}

void kpdEvent (KeypadEvent Key)
{
  switch (kpd.getState())
  {
    case PRESSED :
      switch (Key)
      {
        // appui sur '*' -> vérification de la saisie en cours
        case '*' : checkPassword(); break;
        // appui sur '#' -> réinitialisation de la saisie en cours
        case '#' : pwd.reset(); break;
        // sinon on ajoute le chiffre à la combinaison
        default  : pwd.append(Key); break;
      }
    default : break;
  }
}

void checkPassword(void)
{
  // on remet à zéro l'état du mot de passe
  intruder = false;
  // si le mot de passe est juste...
  if (pwd.evaluate())
  {
    // ...on met à jour l'état de l'alarme : ON>OFF / OFF>ON
    alarm = !alarm;
   
    switch (alarm)
    {
      case true :
      // la LED rouge signale la mise en service de l'alarme
        digitalWrite(red, HIGH);
        delay(2000);
        digitalWrite(red, LOW);
        pwd.reset();  // on remet à zéro la saisie
        break;
      case false :
      // la LED verte signale l'extinction de l'alarme
        digitalWrite(green, HIGH);
        delay(2000);
        digitalWrite(green, LOW);
        pwd.reset();  // on remet à zéro la saisie
        break;
      default :
        break;
    }
  }
  // si le mot de passe est faux...
  else
 {
   // ...on signale l'intrusion à la loop() qui déclenche l'alarme
   // jusqu'à ce que le bon mot de passe soit rentré
   intruder = true;
 }
 // on remet à zéro systématiquement après avoir vérifié pour ne pas avoir d'erreur
 pwd.reset();
}


- VIDÉO -



C'est tout pour cette fois ! J'espère que ce tutoriel vous aura plu, et bonne bidouille en attendant le prochain !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Adafruit

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron