Bonjour, tout d'abord, je tiens a préciser que j'ai commencé dans l'arduino il y a 2 semaines et que j'ai 11 ans (étant nouveau dans le forum, je n'ai pas pu envoyer de fichier pour le code. Il sera directement dans le texte). J'aimerais créer un code pour lecteur RFID. J'aimerais qu'il y aie un nombre d'essai de scan de badge limité pour que quand une personne passe trop de fois le mauvais badge (3 fois par exemple), le lecteur se bloque pendant une certaine durée(30s). Je saurai afficher un message sur l'écran LCD, mais je ne sais pas comment le faire changer automatiquement(passer de "plus que 2 essais" a "plus que 1 essais")et qu'il se bloque au bout de 3 essai incorrects. Voici le code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
#include <SPI.h>
#include <MFRC522.h>
// ecrire ici le numero UID du bon badge
const byte bonUID[4] = {131, 191, 143, 237};
//
const int pinLEDVerte = 2; // LED verte
const int pinLEDRouge = 6; // LED rouge
const int buzzer = 3; // buzzer
const int relais = 4; // relais
const int pinRST = 5; // pin RST du module RC522
const int pinSDA = 53; // pin SDA du module RC522
MFRC522 rfid(pinSDA, pinRST);
void setup() {
lcd.begin(16, 2);
// put your setup code here, to run once:
SPI.begin();
rfid.PCD_Init();
pinMode(pinLEDVerte, OUTPUT);
pinMode(pinLEDRouge, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(relais, OUTPUT);
}
void loop() {
{
lcd.setCursor(0, 0);
lcd.print(" Scannez votre");
lcd.setCursor(0, 1);
lcd.print(" badge");
delay(700);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Scannez votre");
lcd.setCursor(0, 1);
lcd.print(" badge.");
delay(700);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Scannez votre");
lcd.setCursor(0, 1);
lcd.print(" badge..");
delay(700);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Scannez votre");
lcd.setCursor(0, 1);
lcd.print(" badge...");
delay(700);
}
lcd.begin(16, 2);
// put your main code here, to run repeatedly:
int refus = 0; // quand cette variable n'est pas nulle, c'est que le code est refusé
if (rfid.PICC_IsNewCardPresent()) // on a dédecté un tag
{
if (rfid.PICC_ReadCardSerial()) // on a lu avec succès son contenu
{
for (byte i = 0; i < rfid.uid.size; i++) // comparaison avec le bon UID
{
if (rfid.uid.uidByte[i] != bonUID[i]) {
refus++;
}
}
if (refus == 0) // UID accepté
{
// allume LED verte et affiche le message d'accès autorisé.
lcd.print("Scan en cours...");
delay(1000);
lcd.clear();
digitalWrite(pinLEDVerte, HIGH);
digitalWrite(relais, HIGH);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
lcd.setCursor(0, 0);
lcd.print(" Acces autorise");
lcd.setCursor(0, 1);
lcd.print(" Bienvenue");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" La porte");
lcd.setCursor(0, 1);
lcd.print(" est ouverte");
delay(4000);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
lcd.clear();
delay(100);
digitalWrite(pinLEDVerte, LOW);
digitalWrite(relais, LOW);
}
else { // UID refusé
// allume LED rouge et active buzzer 3 fois pendant 200ms et affiche le message d'accès refusé
lcd.print("Scan en cours...");
delay(1000);
lcd.clear();
lcd.print(" Acces refuse");
digitalWrite(pinLEDRouge, HIGH);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(1500);
lcd.clear();
lcd.print(" Badge errone");
delay(2000);
lcd.clear();
lcd.print("Plus que");
lcd.setCursor(0, 1);
lcd.print("2 essais");
delay(100);
digitalWrite(pinLEDRouge, LOW);
digitalWrite(buzzer, LOW);
}
}
}
}
J'espère avoir été bien clair. Bon après-midi a tous.