RFID门禁代码
时间: 2023-07-02 18:15:02 浏览: 61
好的,以下是一个基本的Arduino RFID门禁代码示例:
```c++
#include <MFRC522.h>
#include <SPI.h>
#include <Servo.h>
// 定义RFID模块的引脚
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
// 定义舵机
Servo servo;
const int OPEN_ANGLE = 90;
const int CLOSE_ANGLE = 0;
// 定义允许的卡ID
byte allowedCard[][4] = {
{0x01, 0x02, 0x03, 0x04},
{0x05, 0x06, 0x07, 0x08},
// 添加更多的允许卡ID...
};
const int ALLOWED_CARD_COUNT = sizeof(allowedCard) / sizeof(allowedCard[0]);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
servo.attach(11); // 将舵机连接到引脚11
servo.write(CLOSE_ANGLE); // 初始化舵机位置
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.print("卡ID: ");
for (byte i = 0; i < 4; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
if (isCardAllowed(rfid.uid.uidByte)) {
Serial.println("允许进入!");
servo.write(OPEN_ANGLE); // 开门
delay(2000);
servo.write(CLOSE_ANGLE); // 关门
} else {
Serial.println("禁止进入!");
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
bool isCardAllowed(byte* uid) {
for (int i = 0; i < ALLOWED_CARD_COUNT; i++) {
if (memcmp(allowedCard[i], uid, 4) == 0) {
return true;
}
}
return false;
}
```
该代码使用了MFRC522库和Servo库。您需要在Arduino IDE中安装这些库才能编译和上传代码。在代码中,首先定义了允许的卡ID和RFID模块的引脚。然后,在setup()函数中初始化了串口、SPI和RFID模块,并将舵机连接到引脚11。在loop()函数中,检测RFID模块是否检测到新卡,并读取卡ID。然后,检查卡ID是否允许进入,如果允许,则舵机会打开门,等待2秒后关闭门。如果不允许,则仅在串口中输出错误信息。最后,调用RFID模块的PICC_HaltA()和PCD_StopCrypto1()函数停止与卡的通信。