基于arduino UNO R3 的 MF RC522射频卡控制继电器的实验

硬件支持:1.一块arduino Uno R3

                  2.一个MF RC522非接触式射频接收模块+射频卡

                 3.一个5v电子继电器

软件工具:    IDEarduino-1.0.5-r2 

硬件连接: RC522工作电压3.3v

Arduino           RC522

 

D5————————RST

D10————————SDA(CS)

D11————————MOST

D12————————MISO

D13————————SCK

GND————————GND

VCC(3.3V)————————VCC(3.3V)

 

Arduino              继电器

D7————————IN

GND————————CND

VCC(5V)————————VCC(5V)

MF RC522射频模块的库文件加到   IDEarduino-1.0.5-r2 )库中。

 IDEarduino-1.0.5-r2 )文件夹中找到libraries文件夹将MF RC522库文件复制到当前

 

 

 

代码:

#include <SPI.h>

#include <RFID.h>

 

RFID rfid(10,5);   //D10--读卡器MOSI引脚、D5--读卡器RST引脚

 

int led = 9;

int relay=7;

 

bool state=true;

void setup()

{

 Serial.begin(9600);

 SPI.begin();

 rfid.init();

 pinMode(led, OUTPUT); //设置引脚的模式:输出模式还是输入模式,括号里逗号之前是对应设置的是引脚,逗号后面是设置输出还是输入,输入模式INPUT,引脚输出OUTPUT

 pinMode(relay,OUTPUT);

  digitalWrite(relay,HIGH);//做输出端口,则写:digitalWrite(,);做输入端口,则读 digitalRead(,);digitalWrite(theRedLed,HIGH)引脚输出高电平,digitalWrite(theRedLed,LOW)引脚输出低电平。

 

}

 

void loop()

{

 unsigned char type[MAX_LEN];

  //找卡

  if(rfid.isCard()) {

   Serial.println("Find the card!");

    ;

    //Show card type

   ShowCardType(type);

    //读取卡序列号

    if(rfid.readCardSerial()) {

     Serial.print("The card's number is : ");

     Serial.print(rfid.serNum[0],HEX);

     Serial.print(rfid.serNum[1],HEX);

     Serial.print(rfid.serNum[2],HEX);

     Serial.print(rfid.serNum[3],HEX);

     Serial.print(rfid.serNum[4],HEX);

     Serial.println(" ");

     ShowUser(rfid.serNum);

    }

    //选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡

   Serial.println(rfid.selectTag(rfid.serNum));

  }

 

 rfid.halt();

}

 

void ShowCardType( unsigned char* type)

{

 Serial.print("Card type: ");

 if(type[0]==0x04&&type[1]==0x00)

   Serial.println("MFOne-S50");

  elseif(type[0]==0x02&&type[1]==0x00)

   Serial.println("MFOne-S70");

  elseif(type[0]==0x44&&type[1]==0x00)

   Serial.println("MF-UltraLight");

  elseif(type[0]==0x08&&type[1]==0x00)

   Serial.println("MF-Pro");

  elseif(type[0]==0x44&&type[1]==0x03)

   Serial.println("MF Desire");

  else

   Serial.println("Unknown");

}

 

void ShowUser( unsigned char* id)

{

  //EE9B 9C 38 D1

  if(id[0]==0xB4 && id[1]==0x24 && id[2]==0x37 &&id[3]==0x5D ) {

    Serial.println("HelloMary!");

   state=RelayStatus(state);

  }

  elseif(id[0]==0x44 && id[1]==0x93 && id[2]==0xA8 &&id[3]==0x3A) {

   Serial.println("Hello MicroHao!");

   state=RelayStatus(state);

  }

  elseif(id[0]==0x24 && id[1]==0xC7 && id[2]==0xA7 &&id[3]==0x3B) {

   Serial.println("Hello Tom!");

   state=RelayStatus(state);

  }

  else{

   Serial.println("Hello unkown guy!");

   BlinkLED();

 

  }

}

bool RelayStatus(bool status)

{

 if(status)

  {

   digitalWrite(led, HIGH);   // turnthe LED on (HIGH is the voltage level)

 

   digitalWrite(relay,LOW);

   return false;

  }

 digitalWrite(led, LOW);   // turnthe LED on (HIGH is the voltage level)

 

 digitalWrite(relay,HIGH);

 return true;

}

void BlinkLED()

{

 digitalWrite(relay,HIGH);

 for(int i=0;i<3;i++)

  {

   digitalWrite(led, HIGH);   // turnthe LED on (HIGH is the voltage level)

   delay(1000);

   digitalWrite(led, LOW);    // turnthe LED off by making the voltage LOW

   delay(1000);

  }

}

 

 

 

 



  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值