上圖是RFID讀卡機,啟動後會不停的發送電磁波,當卡片接近時,卡片的線圈會和讀卡機的
電磁場產生共振,即可傳遞資料。
這東西就是所謂的卡片鎖,公司打卡(左)、電梯解鎖(右)都很普遍在運用。
配置先這樣,因為RFID程式本身很長,就簡單一上一顆LED燈就好了。
功能就是記憶兩組編碼(卡片式、鈕扣式),接觸到讀卡機時,點亮LED燈,再接觸時關閉。
卡片式的和鈕扣式的都來玩一下。
程式如下 :
#include <MFRC522.h>
#define RST_PIN A0
#define SS_PIN 10
#define LED 2
bool lockerSwitch = false;
//先預設關閉。
struct RFIDTag {
byte uid[4];
char *name;
};
//RFID編碼結構(4組十進位+名稱)。
struct RFIDTag tags[] = {
{{64,97,93,89}, "Card_Type"},
{{27,70,222,35}, "Button_Type"}
};
//卡片和鈕扣的編碼。
byte totalTags = sizeof(tags) / sizeof(RFIDTag);
MFRC522 mfrc522(SS_PIN, RST_PIN);
void locker(bool toggle) {
if (toggle) {
digitalWrite(LED,HIGH);
delay(100);
} else {
digitalWrite(LED,LOW);
delay(100);
}
//開&關LED的函式。
}
void setup() {
Serial.begin(9600);
Serial.println();
Serial.print("size of RFIDTag:");
Serial.println(sizeof(RFIDTag));
Serial.print("size of tag:");
Serial.println(sizeof(tags));
Serial.println("RFID reader is ready!");
SPI.begin();
mfrc522.PCD_Init();
pinMode(LED,OUTPUT);
locker(lockerSwitch);
}
void loop() {
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
byte *id = mfrc522.uid.uidByte;
byte idSize = mfrc522.uid.size;
bool foundTag = false;
for (byte i=0; i<totalTags; i++) {
if (memcmp(tags[i].uid, id, idSize) == 0) {
Serial.println(tags[i].name);
foundTag = true;
lockerSwitch = !lockerSwitch;
locker(lockerSwitch);
break;
//讀到編碼資料且開、關鎖。
}
}
if (!foundTag) {
Serial.println("Wrong card!");
//如果卡片編碼錯誤就顯示錯誤。
if (lockerSwitch) {
lockerSwitch = false;
locker(lockerSwitch);
}
}
mfrc522.PICC_HaltA();
}
//停止卡片狀態。
}
沒有留言:
張貼留言