Salut à tous,
Voila mon projet, un lecteur de badge RFID avec validation ou non du badge.
Je souhaitais intégrer un écran LCD, tout fonctionne sauf à partir du moment ou le badge est testé et validé, l'écran LCD n'indique pas ce que lui dit d'indiquer.
Voici mon code :
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <LiquidCrystal.h> // on importe la bibliothèque pour l'écran LCD
//on défini nos pin
#define SS_PIN 10
#define RST_PIN 9
Servo monServomoteur;
const int rs = 4, en = 3, d4 = 2, d5 = 1, d6 = 0, d7 = 8; // on indique sur quels PIN sont connectés l'écran
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // écran LCD
// definition des pin du RC522
MFRC522 mfrc522(SS_PIN, RST_PIN);
//on defini la bronche pour notre indicateur/témoin
int Led_rouge = A5;
int Led_verte = 5;
float sinVal; // crée une variable de type "float" appelée "SinVal" et qui contient la valeur sinusoïdale qui fera monter et descendre la tonalité.
int toneVal; // crée une variable de type "int" appelée "toneVal" et qui représente la fréquence de la note produite en hertz (Hz).
char st[20];
char badgeok = " BADGEOK ";
char badgenon = "BADGENON";
void setup()
{
monServomoteur.attach(6);
unsigned long position = 0;
monServomoteur.writeMicroseconds(position);
pinMode(7, OUTPUT);
pinMode(Led_verte, OUTPUT);
pinMode(Led_rouge, OUTPUT);
lcd.begin(16, 2);
//Print a message to the LCD.
lcd.setCursor(5,1); // place le curseur aux coordonnées (2,1)
lcd.print("BADGEZ");
//initialisation serie(pour le relevé d'information via le moniteur série) et initialisation des deux bibliotheque SPI et MFRC522
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
// Message initial (le message afiché au démarrage dans le moniteur serie de notre programme arduino)
Serial.println("Test acces via TAG RFID");
Serial.println();
}
void loop() // le corps de notre programme
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
Serial.print("UID de tag :");
String tag= "";
byte caractere;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
tag.toUpperCase();
// ici on va vérifier l'autorisation
if (tag.substring(1) == "39 C8 76 89") // le numero de tag est visible lorsqu on presente la carte ou le badge via le moniteur serie
//il suffit d'insérer ci-dessus le tag que l'on souhaite authoriser ici on dit que si le tag = 06 62 20 02 est lu alors on affiche dans le moniteur serie
{
// Ici nous allumons la LED
lcd.setCursor(0,0);
affichageOK();
digitalWrite(Led_verte, HIGH);
Serial.println("TAG verifié - Acces Autorisé !");
Serial.println();
for(int x=0; x<180; x++){ // crée une variable "x" de type "int" dont la valeur de départ est de 0 et qui lorsqu'elle est inférieur
// à 180 augmente de +1. Ce qui permet de s'arrurer que la valeur sinusoïdale ne va pas dans le négatif.
sinVal = (sin(x*(3.1412/180))); // permet de convertir la valeur de x en radians pour la suite du programme.
toneVal = 1500+(int(sinVal*1000)); // formule qui permet de convertir la variable en une nouvelle varianble "toneVal" qui défénira la fréquence du Buzzer.
tone(7, toneVal); // utilise la fonction tone, constituer du numéro de la Broche (13) et de la fréquence (toneVal)
delay(2);
//toneVal = 0;
//tone(4, toneVal);
pinMode(7, INPUT);
}
for (int x=0; x<10; x++){
digitalWrite(Led_verte, HIGH);
delay(50);
digitalWrite(Led_verte, LOW);
delay(50);
}
// Fait bouger le bras de 0° à 180°
//for (unsigned long position = 1000; position <= 2000; position += 5) {
unsigned long position = 2000;
monServomoteur.writeMicroseconds(position);
// plus le delay est court, plus rapide est le mouvement et vice versa
delay(3000);
position = 0;
monServomoteur.writeMicroseconds(position);
//delay(1000);
}
// ici on va vérifier un second badge (il est possible d'ajouter plusieurs "else if" il peut être interessant
//d'utiliser la fonction switch je vous invite à vous renseigner sur celle-ci.
else if (tag.substring(1) == "29 14 DE D9") // le numero de tag est visible lorsqu on presente la carte ou le badge via le moniteur serie
//il suffit d'insérer ci-dessus le tag que l'on souhaite authoriser ici on dit que si le tag = 06 62 20 02 est lu alors on affiche dans le moniteur serie
// Tag verifie - Acces Autorisé et nous eteignons notre led pendant 3sec
{
digitalWrite(Led_verte, HIGH);
Serial.println("TAG verifié - Acces Autorisé !");
Serial.println();
delay(1000);
digitalWrite(Led_verte, LOW);
affichageOK();
}
else
//sinon si le Tag n'est pas valide
{
//on affiche Acces refuse !!!
Serial.println("TAG inconnu - Accès refusé !!!");
Serial.println();
affichageNON();
for (int i= 1; i<5 ; i++)
{
digitalWrite(Led_rouge, HIGH);
delay(200);
digitalWrite(Led_rouge, LOW);
delay(200);
//digitalWrite(ventilo, LOW);
}
delay(200);
}
}
void affichageOK() {
lcd.begin(16, 2);
lcd.clear();
lcd.print("OUI");
}
void affichageNON() {
lcd.begin(16, 2);
lcd.clear();
lcd.print("NON");
}
Merci d'avance pour votre aide !! ![]()
Cordialement
Boulauventre