Bonjour
Pour mon projet (contrôle d'accès), j'essaye d'ajouter une fonctionnalité qui est d'enregistrer trois badges, qui déverrouille et lorsqu'on veut en enregistrer un quatrième, le plus ancien ne marche plus pour que le quatrième le remplace. Comme ça il y a toujours que trois badge qui peut déverrouiller le contrôle d'accès.
Le problème, c'est que je suis débutant et j'ai essayé plusieurs chose mais ça été un échec pour l'instant.
Je vous met à disposition mon code (ne fonctionne pas pour enregistrer de nouveau badge)
/*****************************************************************************************************************************************
BIBLIOTHEQUES UTILISEES
*****************************************************************************************************************************************/
#include <Keypad.h> // Bibliothèque pour le clavier
#include <Password.h> // Bibliothèque pour le mot de passe
//#include <simpleMinuteur.h> // Bibliothèque pour le minuteur
#include <SPI.h> // Bibliothèque pour le capteur RFID
#include <MFRC522.h> // Bibliothèque pour le capteur RFID
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
/*****************************************************************************************************************************************
DEFINITION DES NUMERO DE BROCHE UTILISES
*****************************************************************************************************************************************/
#define relais A0
int carte = 12;
String codebon;
String codebon2;
String codebon3;
String compteur;
String compteur2;
String compteur3;
#define SDA_PIN 10
#define RST_PIN 9
#define RX A1
#define TX A2
char texteRecu;
unsigned int randNumber;
SoftwareSerial BT(A4, A5);
SoftwareSerial mySerial(A2, A3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
/*****************************************************************************************************************************************
DEFINITION D'UN OBJET ("Variable") DE TYPE MFRC522
*****************************************************************************************************************************************/
/*****************************************************************************************************************************************
DEFINITION D'UN OBJET ("Variable") DE TYPE PASSWORD
*****************************************************************************************************************************************/
Password pwd = Password("1234"); // Définit le mot de passe
/*****************************************************************************************************************************************
DEFINITION DES VARIABLES et Initialisation
*****************************************************************************************************************************************/
int nbCodeMauvais = 0;
const byte ROWS = 4; // 4 Ligne
const byte COLS = 3; // 3 Colonne
char clavier[ROWS][COLS] = { // Définit les symboles sur les boutons du clavier
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {8, 7, 2, 3}; // Broche pour les lignes
byte colPins[COLS] = {4, 5, 6}; // Broche pour les colonnes
Keypad keypad = Keypad( makeKeymap(clavier), rowPins, colPins, ROWS, COLS); // Créé une variable de nom keypad de la fonction Keypad
/*****************************************************************************************************************************************
CONFIGURATION CARTE ARDUINO UNO
*****************************************************************************************************************************************/
void setup() {
Serial.begin(9600);
SPI.begin(); // Met les broches SLCK, MOSI et SS en sortie, met SCLK et MOSI au niveau bas et SS au niveau haut
BT.begin (9600);
randomSeed(analogRead(1));
pinMode(relais, OUTPUT);
while (!Serial); //Tant qu'il n'y a pas de liaison série, attendre //Attendre 100 ms
Serial.println("\n\nAdafruit finger detect test"); //Afficher le texte dans le port série
finger.begin(57600); //Règle la vitesse de liaison série
delay(5); //Attendre 5 ms
/* if (finger.verifyPassword()) //Si le capteur est bien branché
{
Serial.println("Found fingerprint sensor!"); //Affiche que le capteur et bien branché
} else //Sinon
{
Serial.println("Did not find fingerprint sensor :("); //Affiche que le capteur est mal branché
while (1) { //Tant que le capteur est mal branché
delay(1); //Attendre
}
}*/
}
/*****************************************************************************************************************************************
Programme Principal
*****************************************************************************************************************************************/
void loop()
{
keypad.addEventListener(keypadEvent); // Créé un événement de nom keypadEvent si le clavier est utilisé
keypad.getKey();
// getFingerprintIDez();
RFID();
char key = keypad.getKey();
/*if (BT.available()) {
texteRecu = BT.read();
}
if (Serial.available()) {
BT.write(Serial.read());
}
if (texteRecu == 'a')
{
Serial.println("Déverrouiller");
entree();
texteRecu = 'x';
}*/
}
/*****************************************************************************************************************************************
Fonction RFID() : Sous-Programme qui permet de lire les cartes RFID
*****************************************************************************************************************************************/
void RFID() {
#define SDA_PIN 10
#define RST_PIN 9
MFRC522 mrfc(SDA_PIN, RST_PIN);
mrfc.PCD_Init();
if (! mrfc.PICC_IsNewCardPresent()) //Si il n'y a pas de carte
{
return; //attendre
}
if (! mrfc.PICC_ReadCardSerial()) //Si la carte n'est pas lu dans le moniteur
{
return; //attendre
}
//afficher code du badge :
String contenu = "";
String nouveau = "";
byte lettre;
if (carte = 0) {
for (byte i = 0; i < mrfc.uid.size; i++) {
Serial.println(mrfc.uid.uidByte[i] < 0x10 ? "0" : " ");
Serial.println(mrfc.uid.uidByte[i], HEX); //Envoie le code HEX du badge utilisé
nouveau.concat(String(mrfc.uid.uidByte[i] < 0x10 ? "0" : " "));
nouveau.concat(String(mrfc.uid.uidByte[i], HEX)); //Sauvegarde le code sous contenu
}
nouveau = codebon;
Serial.println("Code Changé");
carte++;
codebon = contenu;
}
for (byte i = 0; i < mrfc.uid.size; i++) //mrfc.uid.size = Taille du code en HEX
{
Serial.print(mrfc.uid.uidByte[i] < 0x10 ? "0" : " ");
Serial.print(mrfc.uid.uidByte[i], HEX); //Envoie le code HEX du badge utilisé
contenu.concat(String(mrfc.uid.uidByte[i] < 0x10 ? "0" : " "));
contenu.concat(String(mrfc.uid.uidByte[i], HEX)); //Sauvegarde le code sous contenu
contenu.toUpperCase();
if (contenu.substring(1) == codebon)
{
Serial.println("Accès autorisé"); //Afficher accès autorisé
Serial.println();
entree();
delay(2000);
}
}
}
/*****************************************************************************************************************************************
Fonction entree qui permet de faire ouvrir la gâche
*****************************************************************************************************************************************/
void entree() {
digitalWrite(relais, HIGH);
delay(100);
digitalWrite(relais, LOW);
}
