|

Contrôle d’accès simple avec clavier et affichage LCD I2C piloter par arduino

Prérequis :

Version IDE :

  • Arduino IDE 2.3.5

Bibliothèque :

Vidéo de démonstration :

Schéma de câblage :

Code :

// Inclure le code de la bibliothèque:
#include <LiquidCrystal_I2C.h>
// Initialiser la bibliothèque avec les dimensions de l'interface
LiquidCrystal_I2C lcd(0x27, 20, 4);

int ledPinVert = 10;
int ledPinRouge = 11;

#include <Keypad.h>
const byte ROWS = 4;  //quatre rangées
const byte COLS = 4;  //quatre colonnes
//définir les symboles sur les boutons des claviers
char hexaKeys[ROWS][COLS] = {
  { '1', '2', '3', 'H' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'G' },
  { '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 9, 8, 7, 6 };  //connecter aux broches de rangée du clavier
byte colPins[COLS] = { 5, 4, 3, 2 };  //se connecter aux broches de colonne du clavier

//initialiser une instance de la classe NewKeypad
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

//Code d'accès à saisir pour déverrouiller 
char code[6] = { '1', '8', '3', '6', '1', '9' };


char codesaisie[6] = { '*', '*', '*', '*', '*', '*' };
byte EtapeSaisiecode;
boolean codesaisieok;
char buffer[20];

void setup() {
  Serial.begin(9600);
  // Initialisation de l'interface LCD
  lcd.init();
  // Active le rétro-éclairage du LCD
  lcd.backlight();

  pinMode(ledPinVert, OUTPUT);
  digitalWrite(ledPinVert, LOW);
  pinMode(ledPinRouge, OUTPUT);
  digitalWrite(ledPinRouge, LOW);
}

void loop() {
  char customKey = customKeypad.getKey();

  if (customKey) {
    if (customKey == '#') {
      if (EtapeSaisiecode > 0) {
        EtapeSaisiecode--;
      }
    } else {
      codesaisie[EtapeSaisiecode] = customKey;
      EtapeSaisiecode++;
    }
    Serial.print("Touche saisie : ");
    Serial.println(customKey);
    Serial.print("Code saisie : ");
    Serial.println(codesaisie);
  }

  lcd.setCursor(3, 0);
  lcd.print("- Code Acces -");
  switch (EtapeSaisiecode) {
    case 0:
      lcd.setCursor(3, 2);
      sprintf(buffer, " * * * * * * ");
      lcd.print(buffer);
      break;
    case 1:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c * * * * * ", codesaisie[0]);
      lcd.print(buffer);
      break;
    case 2:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c %c * * * * ", codesaisie[0], codesaisie[1]);
      lcd.print(buffer);
      break;
    case 3:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c %c %c * * * ", codesaisie[0], codesaisie[1], codesaisie[2]);
      lcd.print(buffer);
      break;
    case 4:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c %c %c %c * * ", codesaisie[0], codesaisie[1], codesaisie[2], codesaisie[3]);
      lcd.print(buffer);
      break;
    case 5:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c %c %c %c %c * ", codesaisie[0], codesaisie[1], codesaisie[2], codesaisie[3], codesaisie[4]);
      lcd.print(buffer);
      break;
    case 6:
      lcd.setCursor(3, 2);
      sprintf(buffer, " %c %c %c %c %c %c ", codesaisie[0], codesaisie[1], codesaisie[2], codesaisie[3], codesaisie[4], codesaisie[5]);
      lcd.print(buffer);
      EtapeSaisiecode++;
      break;
    case 7:
      //Vérification du code saisie par rapport au code accès
      for (int i = 0; i <= 5; i++) {
        if (codesaisie[i] != code[i]) {
          codesaisieok = 0;
          break;
        } else {
          codesaisieok = 1;
        }
      }

      if (codesaisieok == 1) {
        lcd.setCursor(3, 2);
        sprintf(buffer, "  Autoriser   ");
        lcd.print(buffer);
        digitalWrite(ledPinVert, HIGH);
        delay(5000);
      } else {
        lcd.setCursor(3, 2);
        sprintf(buffer, "   Refuser   ");
        lcd.print(buffer);
        digitalWrite(ledPinRouge, HIGH);
        delay(5000);
      }
      digitalWrite(ledPinVert, LOW);
      digitalWrite(ledPinRouge, LOW);
      codesaisieok = 0;
      EtapeSaisiecode = 0;
      break;
  }
}

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *