Pages: [1]   Go Down
Author Topic: mfrc522 rfid lezer samen met rf-modules  (Read 911 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo allemaal,
In mijn project probeer ik RFID samen met RF-communicatie tussen twee arduino's toe te voegen. Ik heb een mfrc522 rfid lezer ik gebruik de library MFRC522.h. Voor de rf-communicatie gebruik ik een simpele rf-transmitter en receiver en  de library VirtualWire.h

Beide modules werken helemaal goed als los van elkaar maar als ik de twee programma's bij elkaar voeg gaat er iets fout. Als ik de opdracht vw_setup(300) weghaal dan kan ik in de seriële monitor kan de UID nog uitlezen, maar als ik een tag scan met de uid die overeenkomt met die van het programma dan stopt het programma ermee. Hij geeft nog wel de uid weer maar daarna loopt het programma als het ware vast. Ik moet de arduino eerst resetten voordat hij het weer doet. Als ik de vw_setup(300) in het programma zet werkt het hele programma niet meer.

Ik wil ervoor zorgen dat je een tag kan uitlezen met de rfid-lezer en dat hij vervolgens bij 4 verschillende tags 4 verschillende karakters vestuurt naar de tweede arduino. Bij elk karakter voert de Arduino een andere actie uit.

Dit is de code van de transmitter:
Code:
#include <SPI.h>
#include <MFRC522.h>
#include <VirtualWire.h>
// voor rfid
#define SS_PIN 10
#define RST_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
// voor rf
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
const char *on2 = "a";
const char *off2 = "b";
const char *on3 = "c";
const char *off3 = "d";
const char *on4 = "e";
const char *off4 = "f";
/*pinconfiguratie:

MFRC522 ARDUINO
SDA 10
SDK 13
MOSI 11
MISO 12
GND GND
RST 5
3.3V 3V3

*/
 

 
void setup() {
         // voor rfid
        Serial.begin(9600);        // Initialize serial communications with the PC
        SPI.begin();                        // Init SPI bus
        mfrc522.PCD_Init();        // Init MFRC522 card
        Serial.println("Scan PICC to see UID and type...");
        pinMode(4, OUTPUT);
        pinMode(5, OUTPUT);
        // voor rf
        vw_set_ptt_inverted(true); // Required for RF Link modules
       // Deze vw_setup(300) zorgt ervoor dat de rest van het programma het dan niet meer doet.
       //vw_setup(300); // set data speed
        vw_set_tx_pin(8);
        
        
  }
 
void loop() {
        // Look for new cards
        if ( ! mfrc522.PICC_IsNewCardPresent()) {

        delay(500);        
          return;
        }
 
        // Select one of the cards
        if ( ! mfrc522.PICC_ReadCardSerial()) {
              
          return;
        }
      
        //UID bevind zich nu in mfrc522.uid
        //uid is een structure, die als volgt gedefinieerd is:
        /*
        typedef struct {
                byte            size;                   // Number of bytes in the UID. 4, 7 or 10.
                byte            uidByte[10];
                byte            sak;                    // The SAK (Select acknowledge) byte returned from the PICC after successful selection.
        } Uid;
        */
      
        //Even voor debug, zodat je weet dat die de card detect
        Serial.print("Card UID: ");
        for (byte i = 0; i < mfrc522.uid.size; i++)
                Serial.print(mfrc522.uid.uidByte[i], HEX);
        Serial.println();      
        compare();
      
        mfrc522.PICC_HaltA();
        delay(1000);
}
 
void compare() {
        //Random uids
        byte uid1[] = { 0x65, 0xF1, 0x7F, 0x2E };
        byte uid2[] = { 0x95, 0xBC, 0x7C, 0xC0 };
        byte uid3[] = { 0x23, 0x2d, 0xa2, 0xff };

      
        if(compare_uid(uid1)) {
                //Actie als er een card met uid1 voor de reader wordt gehouden
                // om aan te geven dat er een kaart is gescant:
                Serial.println("Goede kaart ");
                vw_send((uint8_t *)on2, strlen(on2)); // send the data out to the world
                vw_wait_tx(); // wait a moment
                delay(200);
                
                
                  
              
      
        } else if (compare_uid(uid2)) {
                Serial.println("nog een goede kaart");
                //vw_send((uint8_t *)on3, strlen(on3)); // send the data out to the world
               // vw_wait_tx(); // wait a moment
                //delay(200);
      
        } else if (compare_uid(uid3)) {
               //Actie als er een card met uid3 voor de reader wordt gehouden
               //vw_send((uint8_t *)on4, strlen(on4)); // send the data out to the world
               //vw_wait_tx(); // wait a moment
               //delay(200);
        }
}
 
//Functie om de uids met elkaar te vergelijken
bool compare_uid(byte uid[]) {
        
       for(byte i = 0; i < mfrc522.uid.size; i++)
                if(uid[i] != mfrc522.uid.uidByte[i])
                       { return false;}
        return true;
}


Dit is de code van de receiver:
Code:
#include <VirtualWire.h>
#include <Servo.h>

uint8_t buf[VW_MAX_MESSAGE_LEN];

uint8_t buflen = VW_MAX_MESSAGE_LEN;
Servo myservo;

void setup()
{
  vw_set_ptt_inverted(true); // Required for RF link modules
  vw_setup(300);
  vw_set_rx_pin(8);
  vw_rx_start();
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
 myservo.attach(3) ;
}

void loop()

{
if (vw_get_message(buf, &buflen))
  {
    switch(buf[0])

 {
  case 'a':
  digitalWrite(6, HIGH);
  myservo.write(90);
  break;
  case 'b':
  digitalWrite(6, LOW);
  break;
  case 'c':
  digitalWrite(7, HIGH);
  break;
  case 'd':
  digitalWrite(7, LOW);
  break;
  case 'e':
  digitalWrite(5, HIGH);
   break;
   case 'f':
  digitalWrite(5, LOW);
 
break;
 }

 }

}


Ik hoop dat iemand mij kan helpen dit probleem op te lossen
« Last Edit: December 10, 2013, 03:04:12 pm by MaartenWoutTycho » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Niemand een idee?
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1916
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Niemand een idee?
ik niet
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Pages: [1]   Go Up
Jump to: