#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>

// Initialisation de l'écran LCD 
LiquidCrystal_I2C lcd (0x27, 16, 2);
// Broches utilisées 
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5
#define LED_R 4
#define RELAY1 6

// Création d'un objet MFRC522
MFRC522 mfrc522 (SS_PIN, RST_PIN);
// Ajoutez ici les numéros de cartes autorisées
String carteAutorisee1 = "2A 17 6E 3C";
String carteAutorisee2 = "XX XX XX XX"; // Ajoutez d'autres numéros de cartes au besoin

void setup() 
{
    // Initialisation de l'écran LCD
    lcd.begin(16, 2); // Initialize the LCD
    lcd.backlight();
    // Affichage du message de démarrage 
    lcd.print ("ZENO MODIFF");
    lcd.print("RFID LOCK");
    lcd.setCursor(0, 1);
    delay(1000); 
    lcd.clear();
    // Initialisation de la communication SPI
    SPI.begin();
    // Initialisation du lecteur RFID 
    mfrc522.PCD_Init();
    // Configuration des broches en sortie
    pinMode(LED_G, OUTPUT);
    pinMode(LED_R, OUTPUT); 
    pinMode(RELAY1, OUTPUT);
  }

void loop() 
{
  // Affichage du message "PLACE YOUR RFID TAG" sur l'écran LCD
  lcd.clear();
  lcd.print("PLACE YOUR");
  lcd.setCursor(0, 1);
  lcd.print("RFID TAG");
  delay(1000);
  lcd.clear();

// Recherche de nouvelles cartes RFID
if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}
// Sélection d'une carte RFID
if (!mfrc522.PICC_ReadCardSerial()) {
   return;
}
// Lecture du contenu de la carte RFID
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) 
{
  content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  content.concat(String(mfrc522.uid.uidByte[i], HEX));
}

content.toUpperCase();
// Vérification si la carte est autorisée
  if (content.substring(1) == carteAutorisee1 || content.substring(1) == carteAutorisee2) 
  { // Si la carte est autorisée, ouvrir la serrure et allumer la LED verte
    lcd.clear();
    lcd.print("AUTHORIZED ACCESS");
    lcd.setCursor(0, 0);
    delay(2000);
    lcd.clear();
    digitalWrite(RELAY1, HIGH); 
    digitalWrite(LED_G, HIGH);
    delay(6000);
    digitalWrite(RELAY1, LOW);
    digitalWrite(LED_G, LOW);
    delay(1000);
  }
  else 
  {
    // Si la carte n'est pas autorisée, allumer la LED rouge
    lcd.print("UNAUTHORIZED");
    lcd.setCursor(0, 0);
    digitalWrite(LED_R, HIGH);
    delay(2000);
    digitalWrite(LED_R, LOW);
    lcd.clear();
    delay(2000);
  }
}
RFID-RC522Breakout