#include <SoftwareSerial.h>
#include<SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4];


SoftwareSerial esp8266(2, 3); // Membuat RX Arduino menjadi pin 2 dan TX pin 3


void setup() {                        
  Serial.begin(115200);
  esp8266.begin(115200);
 
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522
  for (byte i = 0; i < 6; i++) {
  key.keyByte[i] = 0xFF;
  }
}



 
void loop()
{
  if(esp8266.available()) // Mengecek apakah ESP mengirimkan pesan
  {
    // Delay digunakan untuk mengatur waktu pengiriman karakter
    delay(500);
   
    String command="";
   
    while(esp8266.available())
    {
       command+=(char)Serial.read();
      // Data ESP akan ditampikan pada output serial window
      char c = esp8266.read(); // Membaca karakter selanjutnya.
      Serial.write(c);
    } 
     esp8266.println(command); // mengirim karakter yang terpaca kepada ESP
  }
 
 //-----------
// Look for new cards
  if (! rfid.PICC_IsNewCardPresent())
 
    return;
  // Verify if the NUID has been read
  if (! rfid.PICC_ReadCardSerial())
 
    return;
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }
  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();
  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();

 //------------


  //------------------------
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? "0":"");
    Serial.print(buffer[i], HEX);
  }
}