2044|0

6837

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

基于arduino UNO R3 的 MF RC522射频卡控制继电器的实验 [复制链接]

硬件支持:1.一块arduino Uno R3
                  2.一个MF RC522非接触式射频接收模块+射频卡
                 3.一个5v电子继电器
软件工具:    IDE(arduino-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射频模块的库文件加到   IDE(arduino-1.0.5-r2 )库中。
在 IDE(arduino-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);
  }
}

此帖出自无线连接论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表