#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define RST_PIN 9 // 重置腳位
#define SS_PIN 10 // SDA 腳位
#define SERVO_PIN 7 // 伺服馬達腳位
MFRC522 mfrc522(SS_PIN, RST_PIN); // 建立 RFID 物件
Servo doorServo; // 建立伺服馬達物件
// 授權卡片 UID (改成 218, 93, 241, 128)
//授權卡片 UID 要更改
// 從工具>序列埠監控視窗查UID
byte doorUID[4] = {218, 93, 241, 128};
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
doorServo.attach(SERVO_PIN);
doorServo.write(0); // 初始關門角度
Serial.println("請將卡片靠近讀卡器...");
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
Serial.print("卡片 UID (10進位): ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i], DEC);
Serial.print(" ");
}
Serial.println();
if (compareUID(mfrc522.uid.uidByte, doorUID)) {
Serial.println("授權卡片 → 開門");
openDoor();
} else {
Serial.println("非授權卡片 → 不動作");
}
mfrc522.PICC_HaltA();
}
// 比對 UID
bool compareUID(byte *uid, byte *target) {
for (byte i = 0; i < 4; i++) {
if (uid[i] != target[i]) return false;
}
return true;
}
// 開門動作
void openDoor() {
doorServo.write(90); // 開門角度 (依實際安裝調整)
delay(3000); // 停留 3 秒
doorServo.write(0); // 關門角度
}
留言
張貼留言