#include #include #include #include #include #include //Display Settings #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); const int buzzer = 7; //buzzer to arduino pin 7 SoftwareSerial SWSerial( 3, 2 ); // RX, TX PN532_SWHSU pn532swhsu( SWSerial ); PN532 nfc( pn532swhsu ); String tagId = "None", dispTag = "None"; byte nuidPICC[4]; void setup(void) { Serial.begin(115200); Serial.println("Hello Maker!"); // Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't Find PN53x Module"); while (1); // Halt } // Got valid data, print it out! Serial.print("Found chip PN5"); Serial.println((versiondata >> 24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC); // Configure board to read RFID tags nfc.SAMConfig(); //Serial.println("Waiting for an ISO14443A Card ..."); //LCD Initialization display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("RFID LOCK"); display.display(); pinMode(buzzer, OUTPUT); } void loop() { readNFC(); } void readNFC() { boolean success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); if (success) { Serial.print("UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes"); Serial.print("UID Value: "); for (uint8_t i = 0; i < uidLength; i++) { nuidPICC[i] = uid[i]; Serial.print(" "); Serial.print(uid[i], HEX); } Serial.println(); tagId = tagToString(nuidPICC); dispTag = tagId; Serial.print(F("tagId is : ")); Serial.println(tagId); Serial.println(""); delay(1000); // 1 second halt //Displaying UID to LCD clearUID(); if(tagId=="E2 39 1B 19" || tagId=="81 6B 5 D1"){ ValidUID(); }else{ inValidUID(); } printUID(); } else { // PN532 probably timed out waiting for a card //Serial.println("Timed out! Waiting for a card..."); } } String tagToString(byte id[4]) { String tagId = ""; for (byte i = 0; i < 4; i++) { if (i < 3) tagId += String(id[i] , HEX) + " "; else tagId += String(id[i] , HEX); //tagId += String(id[i], HEX); } tagId.toUpperCase(); return tagId; } void ValidUID(){ display.clearDisplay(); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("Valid UID"); display.display(); //BUZZER tone(buzzer, 100);delay(100);noTone(buzzer); } void inValidUID(){ display.clearDisplay(); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(5,0); display.print("InValidUID"); display.display(); //BUZZER tone(buzzer, 300);delay(1000);noTone(buzzer); } void clearUID() { display.setTextColor(BLACK); // or BLACK); display.setTextSize(1); display.setCursor(30,20); display.print(tagId); display.display(); } void printUID() { display.setTextColor(WHITE); // or BLACK); display.setTextSize(1); display.setCursor(0,20); display.print("UID: "); display.setCursor(30,20); display.print(tagId); display.display(); }