Accueil > Forum > Electronique > Arduino > Rfid arduino uno

Rfid arduino uno

1 2
Tmer Tmer 5 Messages
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
lobodol lobodol 703 Messages BIG BOSS
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.
Tmer Tmer 5 Messages
Voici mon code

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);    
}
JissJisseone JissJisseone 89 Messages
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
JissJisseone JissJisseone 89 Messages
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.)
JissJisseone JissJisseone 89 Messages
...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...
Tmer Tmer 5 Messages
Je n'ai pas compris ton code :

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
lobodol lobodol 703 Messages BIG BOSS
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 :


[code=arduino]
// code arduino ici
[/code]


C'est tout de suite plus lisible
JissJisseone JissJisseone 89 Messages
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:


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...
JissJisseone JissJisseone 89 Messages
regarde de nouveau ton premier code (le tout premier que tu nous as presenté)

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?? "
Tmer Tmer 5 Messages
J'ai modifier le programme comme tu me l'a indiquer

// #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]'
JissJisseone JissJisseone 89 Messages
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?
Tmer Tmer 5 Messages
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
JissJisseone JissJisseone 89 Messages
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
JissJisseone JissJisseone 89 Messages
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

}
1 2
Vous devez être connecté pour pouvoir répondre à ce sujet.
Utilisation des données

Afin d'améliorer ton expérience utilisateur, nous utilisons des cookies 🍪