Serratura automatizzata

Ciao ragazzi, premesso che son nuovissimo del settore e conosco relativamente poco di come strutturare un buono sketch. Il mio intendo è costruire una serattura automatica con apertura a combinazione e con la possibilità di poter chiudere ed aprire la porta dall’interno utilizzando il telecomandino IR o eventualmente un pulsante sullo shield! Il progetto va benone, ho utilizzato un Buzzer passivo per generare 2 differenti suoni per l’apertura e la chiusura della porta da tastierino esterno! Ho collegato il pulsante dello shield e l’ho programmato, ma ora riscontro delle difficoltà con il ricevitore IR. Premesso che è impossibile a quanto pare utilizzare la libreria IR fornita con gli esempi (a quanto pare va in conflitto con il buzzer) ho installato la IRLib2. Lo sketch che ho sviluppato funziona perfettamente da solo e in combinazione con il servo, ma non funziona (o meglio lo fa ogni tanto) con il codice completo! Premesso che non riscontro prolemi nella compilazione, qualcuno potrebbe dirmi il perchè? Grazie in anticipo (allego di seguito il codice utilizzato)!

#include <Servo.h>
#include <Keypad.h>
#include <pitches.h>
#include <IRLibRecvPCI.h>
IRrecvPCI myReceiver(2);//pin number for the receiver
int button1 = 12; //button pin, connect to ground to move servo
int press1 = 0;
int posizione = 0;
int telecomando;
Servo ServoMotor;
char* password = "2506";  // change the password here, just pick any 3 numbers
int position = 0;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = { 10, 9, 8, 7 };
byte colPins[COLS] = { 6, 5, 4, 3 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// notes in the melody:
int melody[] = {
  NOTE_C5, NOTE_C6
};
int duration = 500;  // 500 miliseconds
int melody1[] = {
  NOTE_C6, NOTE_C5
};


void setup()
{
  Serial.begin(9600);
  myReceiver.enableIRIn();
  LockedPosition(true);
  pinMode(button1, INPUT);
  digitalWrite(12, HIGH);
  int telecomando = 0;

}

void loop()
{
  {
    press1 = digitalRead(button1);
    if (press1 == LOW and posizione == 0)
    {
      ServoMotor.attach(11);
      ServoMotor.write(25);
      delay(300);
      ServoMotor.detach();
      posizione = 1;
    }
    else if (press1 == LOW and posizione == 1)
    {
      ServoMotor.attach(11);
      ServoMotor.write(125);
      delay(300);
      ServoMotor.detach();
      posizione = 0;
    }
  }

  {
    char key = keypad.getKey();
    if (key == '*' || key == '#')
    {
      position = 0;
      LockedPosition(true);
    }

    if (key == password[position])
    {
      position ++;
    } else if (key != NULL)
    {
      position = 0;
    }
    if (position == 4)
    {
      LockedPosition(false);

    }
    delay(100);
  }
  {
    if (myReceiver.getResults() and telecomando == 0) {
      ServoMotor.attach(11);
      ServoMotor.write(125);
      delay(300);
      ServoMotor.detach();
      telecomando = 1;

    }
    else if (myReceiver.getResults() and telecomando == 1) {
      ServoMotor.attach(11);
      ServoMotor.write(25);
      delay(300);
      ServoMotor.detach();
      telecomando = 0;

    }
  }
  myReceiver.enableIRIn();
}
void LockedPosition(int locked)
{
  if (locked)
  {

    ServoMotor.attach(11);
    ServoMotor.write(125);
    delay(500);
    ServoMotor.detach();
    tone(13, NOTE_C5, duration);
    delay(500);
    noTone(13);

  }
  else
  {

    ServoMotor.attach(11);
    ServoMotor.write(25);
    delay(500);
    ServoMotor.detach();
    int thisNote = 0; thisNote < 13; thisNote++;
    tone(13, melody[thisNote], duration);
    delay(500);
    noTone(13);
  }
}

Aggiornamento: a quanto pare ho risolto togliendo il delay (100) che stava prima della funzione del sensore IR, qualcuno sa spiegarmi il perchè di così tanta differenza?