#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
//declare servo pin
int servoPin = 8;
//create servo object
Servo Servo1;
constexpr uint8_t RST_PIN = 9; // Configurable, see typical pin layout above
constexpr uint8_t SS_PIN = 10; // Configurable, see typical pin layout above
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
//attach servo to pin number
Servo1.attach(servoPin);
Servo1.write(10); //start in stopped
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
//Serial.println("in loop");
// Look for new cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.println(F("PICC: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// 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;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.println(F("hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.println(F("dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.println(F("correct_RFID:"));
Serial.println(F("true"));
//unlock turn servo 0 degrees turns clockwise
for(int angle = 10; angle < 180; angle++)
{
Servo1.write(angle);
delay(5);
}
}
else
{
Serial.println(F("second_time"));
Serial.println(F("lock"));
//lock turn servo 180 degree counterclockwise
for(int angle = 180; angle > 10; angle--)
{
Servo1.write(angle);
delay(5);
}
Serial.println(F("yeet"));
}
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i], HEX);
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
}
}
/**
* Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i], DEC);
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
}
}
Comments