本帖最后由 托米 于 2019-7-22 22:02 编辑
研究了好几天,网上一只没有找到可以使用的程序,终于自己改出了一套,分享给大家
/*
* Typical pin layout used:
* -----------------------------------------------------------------------------------------
* 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 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
String read_rfid;
String rfid1 = "FFFFFFFF";//设备1uid
String rfid2 = "00000000";//设备2uid
String rfid3 = "XXXXXXXX";//设备3uid
int lock = 2;
int bee = 3;
int ledr = 4;
int ledg = 5;
int ledb = 6;
void setup()
{
Serial.begin(9600); // Initiate a serial communication
while (!Serial);
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println("Approximate your card to the reader...");
//Serial.println();
pinMode(lock,OUTPUT);
digitalWrite(lock,LOW);
pinMode(bee,OUTPUT);
digitalWrite(bee,LOW);
pinMode(ledr,OUTPUT);
digitalWrite(ledr,HIGH);
pinMode(ledg,OUTPUT);
digitalWrite(ledg,HIGH);
pinMode(ledb,OUTPUT);
digitalWrite(ledb,HIGH);
}
void dump_byte_array(byte *buffer,byte bufferSize)
{
read_rfid="";
for(byte i = 0;i < bufferSize;i++)
{
read_rfid = read_rfid + String(buffer,HEX);
}
}
void open_lock()
{
bb();
}
void bb()
{
digitalWrite(ledb,HIGH);
digitalWrite(ledg,LOW);
for (int x = 0;x < 100;x++)
{
digitalWrite(bee,HIGH);
delay(1);
digitalWrite(bee,LOW);
delay(1);
}
for (int x = 0;x < 200;x++)
{
digitalWrite(bee,HIGH);
delayMicroseconds(300);
digitalWrite(bee,LOW);
delayMicroseconds(300);
}
digitalWrite(ledg,HIGH);
}
void loop()
{
digitalWrite(ledb,LOW);
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
dump_byte_array(mfrc522.uid.uidByte,mfrc522.uid.size);
Serial.println(read_rfid);
if(read_rfid == rfid1 or read_rfid == rfid2 or read_rfid == rfid3)
{
Serial.println("Pass");
open_lock();
}
else
{
digitalWrite(ledb,HIGH);
digitalWrite(ledr,LOW);
for (int x = 0;x < 100;x++)
{
digitalWrite(bee,HIGH);
delay(1);
digitalWrite(bee,LOW);
delay(1);
}
delay(80);
for (int x = 0;x < 100;x++)
{
digitalWrite(bee,HIGH);
delay(1);
digitalWrite(bee,LOW);
delay(1);
}
digitalWrite(ledr,HIGH);
}
// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
mfrc522.PICC_HaltA();
// 停止读卡模块编码
mfrc522.PCD_StopCrypto1();
}
|