RFID 感應門(伺服馬達)

 



#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);    // 關門角度

}








留言