RFID-RC522门禁

Arduino与RC522连线方法

RFID-RC522门禁_第1张图片

RC522引脚 Arduin引脚
SDA 自定义
SCK 13(SCK)
MOSI 11(MOSI)
MISO 12(MISO)
GND GND
RST 自定义
3.3 3.3V

以下程序在UID读卡程序上改进,添加卡片验证功能,并添加卡片功用。

#include 
#include 
 
#define SS_PIN 10  //定义RC522的SDA引脚的接线位置。
#define RST_PIN 9  //定义RC522的RST引脚的接线位置。


String refid1="";//先声明一个空的字符串全局变量。以便后面存储nuidPICC里面的数据。

 
MFRC522 rfid(SS_PIN, RST_PIN); //实例化类
 
// 初始化数组用于存储读取到的NUID 
byte nuidPICC[4];
 
void setup() { 
  Serial.begin(9600);
  SPI.begin(); // 初始化SPI总线
  rfid.PCD_Init(); // 初始化 MFRC522 
}
 
void loop() {
 
  // 找卡
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
 
  // 验证NUID是否可读
  if ( ! rfid.PICC_ReadCardSerial())
    return;
 
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
 
  // 检查是否MIFARE卡类型
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println("不支持读取此卡类型");
    return;
  }
  
  // 将NUID保存到nuidPICC数组
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }   
  Serial.print("十进制UID:");
  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();
  
  //对读取的卡号“13023719522”进行比较,注意数据类型。
  if(refid1=="13023719522")		
    {
		//判断为真,执行需要的程序。
		Serial.println("已验证");
      }
    else
    {
    	//判断为假,执行需要的程序。
      Serial.println("验证失败");
      }

  
  // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
  rfid.PICC_HaltA();
 
  // 停止读卡模块编码
  rfid.PCD_StopCrypto1();
  refid1="";
}
 
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : "");
    
 //这里对nuidPICC进行存储 
    refid1+=nuidPICC[i];
    


  }
   //这里对nuidPICC打印,看是是自己需要的数据。 
  Serial.print(refid1);
}

你可能感兴趣的:(Arduino)