Abertura de Porta com PIR + RFID

Pessoal, segue um projeto em desenvolvimento para a abertura de uma porta com RFID do lado de fora e PIR Sensor do lado de dentro...

Os códigos individuais funcionam bem, mas quando eu monto com ambas funçoes no loop o PIR sobressai ao RFID...

Alguma dica de onde está o erro?

//Programa: Sistema de trava eletrica com RFID + PIR
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
int pinopir = 3;  //Pino ligado ao sensor PIR
int acionamento;  //Variavel para guardar valor do sensor

void setup() 
{
  Serial.begin(9600);   // Inicia a serial
  SPI.begin();      // Inicia  SPI bus
  mfrc522.PCD_Init();   // Inicia MFRC522
  Serial.println("Aproxime o seu cartao do leitor ou toque na porta...");
  Serial.println();
  pinMode(2, OUTPUT);
  pinMode(pinopir, INPUT);   //Define pino sensor como entrada
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(2, OUTPUT);
}

void loop()
{
    rfid();  
    presenca();
}

void presenca()
{
  acionamento = digitalRead(pinopir); //Le o valor do sensor PIR
  if (acionamento == 1)  
   {
    Serial.println("Até Logo !");
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(4000);           // espera 4 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
   }
}


void rfid() 
{
  // Procura por cartao RFID
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Seleciona o cartao RFID
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Mostra UID na serial
  Serial.print("UID da tag :");
  String conteudo= "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Mensagem : ");
  conteudo.toUpperCase();
 
  if (conteudo.substring(1) == "74 A9 4E 43") //UID 1 - Cartao
  {
    Serial.println("Bem Vindo, Cartao 1");
    Serial.println();
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(2000);           // espera 2 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
  }  
    if (conteudo.substring(1) == "A7 BA 80 26") //UID 2 - Cartao
  {
    Serial.println("Bem Vindo, Cartao 2");
    Serial.println();
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(2000);           // espera 2 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
  }  
  if (conteudo.substring(1) == "4D 6C B5 63") //UID 3 - Cartao
  {
    Serial.println("Bem Vindo, Cartao 3");
    Serial.println();
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(2000);           // espera 2 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
  }  
    if (conteudo.substring(1) == "76 B5 64 1F") //UID 4 - Cartao
  {
    Serial.println("Bem Vindo, Cartao 4");
    Serial.println();
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(2000);           // espera 2 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
  }  
}