สัปดาห์ที่ 7

การใช้งาน RFID อ่านค่าจากคีย์การ์ด

  1. การต่อวงจร

2. การติดตั้ง RFID Libraries

ดาวน์โหลด RFID libraries

http://asrs-ubru.tech/microcontroller/wp-content/uploads/2020/05/rfid-master.zip

3. โปรแกรมสำหรับอ่านค่าจากคีย์การ์ด (สามารถคัดลอกไปวางได้เลย)

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

void setup() 
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
}
void loop() 
{
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
    return;
      
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
 
  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) 
  {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }
  String strID = "";
  for (byte i = 0; i < 4; i++) 
  {
    strID +=
    (rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
    String(rfid.uid.uidByte[i], HEX) +
    (i!=3 ? ":" : "");
  }
  strID.toUpperCase();
  Serial.print("Card key: ");
  Serial.println(strID);

  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
}

ผลการอ่านค่าจากคีย์การ์ด

4. การควบคุมหลอดไฟ LED (แก้ไขโปรแกรมใหม่ อาจไม่เหมือนในวีดีโอ)

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

void setup() 
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
}
void loop() 
{
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
    return;
      
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
 
  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) 
  {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  String strID = "";
  for (byte i = 0; i < 4; i++) 
  {
    strID +=
    (rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
    String(rfid.uid.uidByte[i], HEX) +
    (i!=3 ? ":" : "");
  }
  strID.toUpperCase();
  Serial.print("Card key: ");
  Serial.println(strID);

  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
  if (strID == "04:7F:90:2B")
  {
    digitalWrite(2,1);
    delay(3000);
    digitalWrite(2,0);
  }

  if (strID == "37:07:AF:7B")
  {
    digitalWrite(3,1);
    delay(3000);
    digitalWrite(3,0);
  }
}

4. ผลการทดสอบ