rc522
https://randomnerdtutorials.com/security-access-using-mfrc522-rfid-reader-with-arduino/



切记 3.3V


/*
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
//保存卡的信息
String namerfid;
// 初始化卡的id
byte nuidPICC[4];
//初始化读卡器
void Rfid_int()
{
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
//实时获取新卡的信息
void Get_rfid()
{
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! rfid.PICC_IsNewCardPresent())
{
return;
}
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
{
return;
}
//Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// Serial.println(rfid.PICC_GetTypeName(piccType));
String rfig_type=String(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
//Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
// Store NUID into nuidPICC array 保存上个 卡信息
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
namerfid=namerfid+String(rfid.uid.uidByte[i]);//新卡-和上一张不一样
}
namerfid=namerfid+"-new-1-type-"+rfig_type+"-";//新卡-和上一张不一样
}
else
{
// Store NUID into nuidPICC array 保存上个 卡信息
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
namerfid=namerfid+String(rfid.uid.uidByte[i]);//旧卡-和上一张一样
}
namerfid=namerfid+"-new-0-type-"+rfig_type+"-";///旧卡-和上一张一样
}
Serial.println(namerfid);
namerfid="";
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
void setup() {
Serial.begin(9600);
Rfid_int();
}
void loop() {
//获取卡的信息
Get_rfid();
//delay(1);
}