Rfid arduino uno

Le mardi 27 octobre 2020 à 09:33:18
Bonjour
Je souhaite crée une boîte à clé rfid avec une serrure électronique mais malheureusement je ne peut pas ajouter plusieurs tag.
Quelqu'un a t'il une solution
Théo
Je souhaite crée une boîte à clé rfid avec une serrure électronique mais malheureusement je ne peut pas ajouter plusieurs tag.
Quelqu'un a t'il une solution
Théo
Le mardi 27 octobre 2020 à 09:37:15
Salut Tmer, on peut voir ton code Arduino ?
Quelle librairie as-tu utilisée ?
Normalement il n'y a pas de soucis pour ajouter plusieurs tags.
Quelle librairie as-tu utilisée ?
Normalement il n'y a pas de soucis pour ajouter plusieurs tags.

Le mardi 27 octobre 2020 à 09:49:08
Voici mon code
Mes bibliothèques utilisé sont SPI et RFID
Mes bibliothèques utilisé sont SPI et RFID
#include <SPI.h>
#include <RFID.h>
const char DOUT_LED_ROUGE = 2;
const char DOUT_LED_VERTE = 3;
RFID monModuleRFID(10,9);
int UID[5]={};
int MASTERKEY[5]={170,108,248,128,190};
void setup()
{
Serial.begin(9600);
SPI.begin();
monModuleRFID.init();
pinMode(DOUT_LED_ROUGE, OUTPUT);
pinMode(DOUT_LED_VERTE, OUTPUT);
digitalWrite(DOUT_LED_ROUGE, LOW);
digitalWrite(DOUT_LED_VERTE, LOW);
}
void loop()
{
if (monModuleRFID.isCard()) {
if (monModuleRFID.readCardSerial()) {
Serial.print("L'UID est: ");
for(int i=0;i<=4;i++)
{
UID[i]=monModuleRFID.serNum[i];
Serial.print(UID[i],DEC);
Serial.print(".");
}
Serial.println("");
}
if (UID[0] == MASTERKEY[0]
&& UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2]
&& UID[3] == MASTERKEY[3]
&& UID[4] == MASTERKEY[4])
{
digitalWrite(DOUT_LED_VERTE, HIGH);
delay(500);
digitalWrite(DOUT_LED_VERTE, LOW);
}
else
{
digitalWrite(DOUT_LED_ROUGE, HIGH);
delay(500);
digitalWrite(DOUT_LED_ROUGE, LOW);
}
monModuleRFID.halt();
}
delay(1);
}

Le mardi 27 octobre 2020 à 19:17:20
Bonjour Tmer ...j'ai ce code a te proposer ...avec ces inconveniants...
https://www.firediy.fr/forum/modifier/topic/boucle-gourmande-en-cpu-script-python
https://www.firediy.fr/forum/modifier/topic/boucle-gourmande-en-cpu-script-python

Le mardi 27 octobre 2020 à 20:04:53
ou sinon rajoute quelques lignes
#include <SPI.h>
#include <RFID.h>
const char DOUT_LED_ROUGE = 2;
const char DOUT_LED_VERTE = 3;
RFID monModuleRFID(10,9);
int UID[1]={};
int UID[2]={};
ETC...ETC
int UID[5]={};
int MASTERKEY[1]={170,108,248,128,190};
int MASTERKEY[2]={XXX,XXX,XXX,XXX};
int MASTERKEY[3]={XXX,XXX,XXX,XXX};
ETC ETC...
(je vais le tester d'ailleur...a non j'ai pas les bonnes biblotheques.)
#include <SPI.h>
#include <RFID.h>
const char DOUT_LED_ROUGE = 2;
const char DOUT_LED_VERTE = 3;
RFID monModuleRFID(10,9);
int UID[1]={};
int UID[2]={};
ETC...ETC
int UID[5]={};
int MASTERKEY[1]={170,108,248,128,190};
int MASTERKEY[2]={XXX,XXX,XXX,XXX};
int MASTERKEY[3]={XXX,XXX,XXX,XXX};
ETC ETC...
(je vais le tester d'ailleur...a non j'ai pas les bonnes biblotheques.)

Le mardi 27 octobre 2020 à 20:15:15
...j'ai supprimé du post le code que je te proposais...il n'etait pas interressant pour ton probleme...je le remets sur demande eventuelle...

Le mardi 27 octobre 2020 à 20:58:39
Je n'ai pas compris ton code :
Voici le code comme je l'ai écris comprend tu l'erreur ?
Sinon je n'ai pas compris le code dans ton 2ième message
Théo
Voici le code comme je l'ai écris comprend tu l'erreur ?
#include <SPI.h>
#include <RFID.h>
const char DOUT_LED_ROUGE = 2;
const char DOUT_LED_VERTE = 3;
RFID monModuleRFID(10,9);
int UID[5]={};
int UID[6]={};
int MASTERKEY[5]={170,108,248,128,190};
int MASTERKEY[6]={170,108,248,128,190};
void setup()
{
Serial.begin(9600);
SPI.begin();
monModuleRFID.init();
pinMode(DOUT_LED_ROUGE, OUTPUT);
pinMode(DOUT_LED_VERTE, OUTPUT);
digitalWrite(DOUT_LED_ROUGE, LOW);
digitalWrite(DOUT_LED_VERTE, LOW);
}
void loop()
{
if (monModuleRFID.isCard()) {
if (monModuleRFID.readCardSerial()) {
Serial.print("L'UID est: ");
for(int i=0;i<=4;i++)
{
UID[i]=monModuleRFID.serNum[i];
Serial.print(UID[i],DEC);
Serial.print(".");
}
Serial.println("");
}
if (UID[0] == MASTERKEY[0]
&& UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2]
&& UID[3] == MASTERKEY[3]
&& UID[4] == MASTERKEY[4])
{
digitalWrite(DOUT_LED_VERTE, HIGH);
delay(500);
digitalWrite(DOUT_LED_VERTE, LOW);
}
else
{
digitalWrite(DOUT_LED_ROUGE, HIGH);
delay(500);
digitalWrite(DOUT_LED_ROUGE, LOW);
}
monModuleRFID.halt();
}
delay(1);
}
Sinon je n'ai pas compris le code dans ton 2ième message
Théo
Le mardi 27 octobre 2020 à 22:21:35
Slt Théo, je me suis permis d'éditer tes posts pour formatter le code Arduino. De manière générale, quand vous partagez votre code sur le forum, mettez-le en forme de cette manière :
C'est tout de suite plus lisible
[code=arduino]
// code arduino ici
[/code]
C'est tout de suite plus lisible

Le samedi 31 octobre 2020 à 09:08:42
salut ..je ne sais pas comment faire pour faire apparaitre les codes comme toi lobodol ...dsl
salut theo..excuse moi, je n'ai pas ete tres clair...
Dans le debut de ton prog, tu declare les constantes de tes badje:
on a donc 2 badjes de declarés:
puis plus bas, quand tu passes ton badje, tu as les lignes de codes qui verifient que tes deux badje sont bien valides
voila CQFD ... ton code arduino dit : Les badjes sont int UID(1) et int UID(2) dont les codes d'acces sont int MASTERKEY(1)={xxx,xxxx,xxx,xx1} et int MASTERKEY(2)={xxx,xxxx,xxx,xx2}
plus bas, il dit : if (UID[1) == MASTERKEY(1) donc, SI l'UID(1) correspond au MASTERKEY1, alors l'acces est validé...et c'est la meme chose pour l'UID(2)...si il correspnd au MASTERKEY(2) alors le deuxieme badje est validé aussi...
salut theo..excuse moi, je n'ai pas ete tres clair...
Dans le debut de ton prog, tu declare les constantes de tes badje:
int UID[1]={};
int UID[2]={};
on a donc 2 badjes de declarés:
UID[1] et UID[2]qui ont respectivement les codes d'acces
int MASTERKEY[1]={xxx,xxx,xxx,xxx,001};
int MASTERKEY[2]={xxx,xxx,xxx,xxx,002}
puis plus bas, quand tu passes ton badje, tu as les lignes de codes qui verifient que tes deux badje sont bien valides
if (UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2]
voila CQFD ... ton code arduino dit : Les badjes sont int UID(1) et int UID(2) dont les codes d'acces sont int MASTERKEY(1)={xxx,xxxx,xxx,xx1} et int MASTERKEY(2)={xxx,xxxx,xxx,xx2}
plus bas, il dit : if (UID[1) == MASTERKEY(1) donc, SI l'UID(1) correspond au MASTERKEY1, alors l'acces est validé...et c'est la meme chose pour l'UID(2)...si il correspnd au MASTERKEY(2) alors le deuxieme badje est validé aussi...

Le samedi 31 octobre 2020 à 09:28:28
regarde de nouveau ton premier code (le tout premier que tu nous as presenté)
tu declarais un badje appelé : int UID(5)
mais au moment de validé le badje ... bin... int UID(5) n'existe plus :
ou est UID[5] ?
Avais tu une erreur au moment du televersement ..du genre " Constant char not declared in scope?? "
tu declarais un badje appelé : int UID(5)
int UID[5]={};
int MASTERKEY[5]={170,108,248,128,190};
mais au moment de validé le badje ... bin... int UID(5) n'existe plus :
if (UID[0] == MASTERKEY[0]
&& UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2]
&& UID[3] == MASTERKEY[3]
&& UID[4] == MASTERKEY[4])
ou est UID[5] ?
Avais tu une erreur au moment du televersement ..du genre " Constant char not declared in scope?? "

Le samedi 31 octobre 2020 à 10:25:52
J'ai modifier le programme comme tu me l'a indiquer
L'erreur qu'il m'indiquer lorsque je vérifie mon programme est celle ci
// #include <SPI.h>
#include <RFID.h>
const int LED_ROUGE = 2;
const int SERRURE = 3;
RFID monModuleRFID(10,9);
int UID[1]={};
int UID[2]={};
int MASTERKEY[1]={};
int MASTERKEY[2]={};
void setup()
{
Serial.begin(9600);
SPI.begin();
monModuleRFID.init();
pinMode(LED_ROUGE, OUTPUT);
pinMode(SERRURE, OUTPUT);
digitalWrite(LED_ROUGE, LOW);
}
void loop()
{
if (monModuleRFID.isCard()) {
if (monModuleRFID.readCardSerial()) {
Serial.print("L'UID est: ");
for(int i=0;i<=4;i++)
{
UID[i]=monModuleRFID.serNum[i];
Serial.print(UID[i],DEC);
Serial.print(".");
}
Serial.println("");
}
if (UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2])
{
digitalWrite(SERRURE, HIGH);
delay(1000);
digitalWrite(SERRURE, LOW);
}
else
{
digitalWrite(LED_ROUGE, HIGH);
delay(500);
digitalWrite(LED_ROUGE, LOW);
}
monModuleRFID.halt();
}
delay(1);
}
L'erreur qu'il m'indiquer lorsque je vérifie mon programme est celle ci
//conflicting declaration 'int UID [2]'

Le samedi 31 octobre 2020 à 14:57:52
Aolrs dsl si j'ai fais le malin en prog...c'est pas trop mon domaine...mais mon principe, c'est de recuperer des code et à les re adapter à mes besoins...quand tu nous as presenté ton code, il etais evident que les points que j'ai soulignés, posaient probleme...apres en syntaxe, je suis une bique...mais ma maison fonctionne comme ça...avec un badje par personne..un petit tag rfid ...et ça fonctionne bien...vers quoi veux tu retourner tes info de lecture de badje??
une serrure connectée ??
une box ou un soft domotique?
une serrure connectée ??
une box ou un soft domotique?

Le samedi 31 octobre 2020 à 15:11:03
Je retourne simplement mes infos vers une serrure électrique classique que je commande via un pin de Led et un relais. Je n'arrive simplement pas à ajouter 2 tags au programme

Le samedi 31 octobre 2020 à 16:17:33
Pour moi, je tourne avec ce systeme sous rasp 3 avec un script en python...je te remets le lien de base qui explique tout et prends en consideration plusieurs badje
https://www.firediy.fr/forum/modifier/topic/boucle-gourmande-en-cpu-script-python
https://www.firediy.fr/forum/modifier/topic/boucle-gourmande-en-cpu-script-python

Le samedi 31 octobre 2020 à 16:20:49
rah je comprends mieux ton soft ...je viens d'en trouver un detail sur
http://idehack.com/blog/utiliser-un-module-rfid-rc522-avec-larduino/
je comprends mieux le master key...en fait ca decompose le chiffrage de la cle...excuse moi, je t'ai introduit en erreur...MAIS...je vais essayer de me sauver...le principe est le bon... tu dois des le depart, declarer plusieurs badjes et avoir une sequence pour les valides...
un exemple de code :
[code]
/*
* Dump serial number of a MIFARE RFID card using a RFID-RC522 reader
* Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* https://github.com/miguelbalboa/rfid
-----------------------------------------------------------------------------
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 52 MOSI
* SPI MISO 12 51 MISO
* SPI SCK 13 50 SCK
*
* Hardware required:
* Arduino
* PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC
* PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203.
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10 //Arduino Uno
#define RST_PIN 9
byte tagok = 0;
unsigned long sernum[11] = {0, 679864085, 3478850816, 1159921925, 3278950471, 0, 0, 0, 0,0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("SERIAL OK ");
}
void loop() {
digitalWrite(led, LOW);
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) return;
Serial.print("Card UID:"); //Dump UID
for (byte i = 0; i < 4; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned
Serial.print(" ");
Serial.print(sernum[0]);
Serial.print(" ");
Serial.print(sernum[0], HEX);
Serial.print(" ");
tagok = 0;
for (byte i = 1; i < 10; i++) {
if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste
}
if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue
if (tagok == 0) { // faire si carte inconnue
Serial.print("TAG INCONNU");
}
if (tagok >0) //faire si carte reconnue
{
digitalWrite(led, HIGH);
Serial.print("TAG OK ");
if (sernum[0] == sernum[1]) Serial.print("Badge STOCK " );
if (sernum[0] == sernum[2]) Serial.print("Badge LABO " );
if (sernum[0] == sernum[3]) Serial.print("Bramble card OK " );
if (sernum[0] == sernum[4]) Serial.print("Badge ANECHO " );
if (sernum[0] == sernum[10]) Serial.print("Badge MASTER " );
delay(50);
digitalWrite(led, LOW);
}
if (tagok == 255) //faire si carte master reconnue
{
Serial.print("CARTE MASTER RECONNUE");
}
Serial.println();
mfrc522.PICC_HaltA(); // Halt PICC
}
http://idehack.com/blog/utiliser-un-module-rfid-rc522-avec-larduino/
je comprends mieux le master key...en fait ca decompose le chiffrage de la cle...excuse moi, je t'ai introduit en erreur...MAIS...je vais essayer de me sauver...le principe est le bon... tu dois des le depart, declarer plusieurs badjes et avoir une sequence pour les valides...
un exemple de code :
[code]
/*
* Dump serial number of a MIFARE RFID card using a RFID-RC522 reader
* Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* https://github.com/miguelbalboa/rfid
-----------------------------------------------------------------------------
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 52 MOSI
* SPI MISO 12 51 MISO
* SPI SCK 13 50 SCK
*
* Hardware required:
* Arduino
* PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC
* PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203.
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10 //Arduino Uno
#define RST_PIN 9
byte tagok = 0;
unsigned long sernum[11] = {0, 679864085, 3478850816, 1159921925, 3278950471, 0, 0, 0, 0,0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("SERIAL OK ");
}
void loop() {
digitalWrite(led, LOW);
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) return;
Serial.print("Card UID:"); //Dump UID
for (byte i = 0; i < 4; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned
Serial.print(" ");
Serial.print(sernum[0]);
Serial.print(" ");
Serial.print(sernum[0], HEX);
Serial.print(" ");
tagok = 0;
for (byte i = 1; i < 10; i++) {
if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste
}
if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue
if (tagok == 0) { // faire si carte inconnue
Serial.print("TAG INCONNU");
}
if (tagok >0) //faire si carte reconnue
{
digitalWrite(led, HIGH);
Serial.print("TAG OK ");
if (sernum[0] == sernum[1]) Serial.print("Badge STOCK " );
if (sernum[0] == sernum[2]) Serial.print("Badge LABO " );
if (sernum[0] == sernum[3]) Serial.print("Bramble card OK " );
if (sernum[0] == sernum[4]) Serial.print("Badge ANECHO " );
if (sernum[0] == sernum[10]) Serial.print("Badge MASTER " );
delay(50);
digitalWrite(led, LOW);
}
if (tagok == 255) //faire si carte master reconnue
{
Serial.print("CARTE MASTER RECONNUE");
}
Serial.println();
mfrc522.PICC_HaltA(); // Halt PICC
}