ayuda con mi proyecto rfid

Hola buenas, tengo un código en arduino para la función de una puerta con tarjetas rfid. Cuando quiero dar de alta una tarjeta tengo que pasar la administradora y luego la usuario después de hacer todo esto vuelve a modo normal, quiero que desde pues de pasar la tarjeta se quede en modo grabación para poder grabar mas de 1 tarjeta y luego salir pasando la tarjeta de administrador, igual para borrar tarjetas.

Led azul fijo: modo normal
Led azul intermitente: modo administrador
Led verde dentro de administración tarjeta guardada
led rojo dentro de administración tarjeta borrada
led verde modo normal puerta abierta
led rojo modo normal error tarjeta no admitida

/* ARDUINO RFID-RC522 PUERTA DE SEGURIDAD
 * CONEXIONES: 
 * LEDS: AZUL = 5 ROJO = 7 VERDE = 6
 * RELE = 4   
 *    RFID-RC522         ARDUINO UNO
 * ------------------------------------- 
 *      3.3V                 3.3V
 *      RST                 PIN 9
 *      GND                  GND
 *      RQ                   --
 *     MISO                 PIN 12
 *     MOSI                 PIN 11
 *     SCK                  PIN 13
 *     SDA                  PIN 10
 */



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

#define LED_COMUN

#ifdef LED_COMUN
#define LED_ON HIGH
#define LED_OFF LOW
#endif

#define Ledrojo 7
#define Ledverde 6
#define Ledazul 5
#define rele 4
#define pitido 3
boolean coincide = false;
boolean programMode = false; 

byte guardartarjeta[4];  
byte leertarjeta[4];           
byte tarjetaadmin[4] = {0xE0,0x8C,0xD7,0x1F}; // TARJETA ADMINISTRADOR

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  pinMode(Ledrojo, OUTPUT);
  pinMode(Ledverde, OUTPUT);
  pinMode(Ledazul, OUTPUT);
  pinMode(rele, OUTPUT);
  pinMode(pitido, OUTPUT);
  digitalWrite(rele, HIGH);
  Serial.begin(9600);
  SPI.begin();           
  mfrc522.PCD_Init();    
}
void loop () {
  int okleer;  
  do {
    okleer = cojerid(); 
    if (programMode) {
      modoadmin(); 
    }
    else {
      modonormal(); 
    }
  }
  while (!okleer); 
  if (programMode) {
    programMode = false;  
    if ( esAdmin(leertarjeta) ) {  
      return;
    }
    else {	
      if ( buscarid(leertarjeta) ) { 
         borrarid(leertarjeta);   
      }
      else {                   
        guardarid(leertarjeta); 
       // AQUI ES DONDE GUARDA LA TA TRAJETA 
      }
    }
  }
  else {
    if ( esAdmin(leertarjeta) ) {  
      programMode = true;
      int count = EEPROM.read(0);  
    }
    else {
      if ( buscarid(leertarjeta) ) {         
        abrirpuerta(9000);                
      }
      else {				
        fallo(); 
      }
    }
  }
}
int cojerid() {
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    return 0;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) { 
    return 0;
  }
  Serial.println("");
   Serial.println("TARJETA N");
  for (byte i = 0; i < mfrc522.uid.size; i++) { 
    leertarjeta[i] = mfrc522.uid.uidByte[i];
   Serial.print(leertarjeta[i], HEX);
  }

  mfrc522.PICC_HaltA(); 
  return 1;
}
void modoadmin() {
   digitalWrite(Ledazul, LED_OFF); 
  digitalWrite(Ledrojo, LED_OFF); 
  digitalWrite(Ledverde, LED_OFF);
  delay(200);
  digitalWrite(Ledazul, LED_ON);
  delay(200);
  digitalWrite(Ledazul, LED_OFF);
  delay(200);
  digitalWrite(Ledazul, LED_ON);
  delay(200);
  digitalWrite(Ledazul, LED_OFF); 
  delay(200);
  digitalWrite(Ledazul, LED_ON); 
  delay(200);
}
void modonormal () {
  digitalWrite(Ledazul, LED_ON); 
  digitalWrite(Ledrojo, LED_OFF); 
  digitalWrite(Ledverde, LED_OFF); 
  digitalWrite(rele, HIGH); 
}
void leerid( int number ) {
  int start = (number * 4 ) - 3; 
  for ( int i = 0; i < 4; i++ ) { 
    guardartarjeta[i] = EEPROM.read(start+i); 
  }
}

void guardarid( byte a[] ) {
  if ( !buscarid( a ) ) { 
    int num = EEPROM.read(0); 
    int start = ( num * 4 ) + 1; 
    num++; 
    EEPROM.write( 0, num ); 
    for ( int j = 0; j < 4; j++ ) { 
      EEPROM.write( start+j, a[j] ); 
    }
    guardadook();
  }
  else {
    falloguardar();
  }
}
void borrarid( byte a[] ) {
  if ( !buscarid( a ) ) { 
    falloguardar(); 
  }
  else {
    int num = EEPROM.read(0);  
    int slot; 
    int start;
    int looping; 
    int j;
    int count = EEPROM.read(0);
    slot = buscarids( a ); 
    start = (slot * 4) - 3;
    looping = ((num - slot) * 4);
    num--; 
    EEPROM.write( 0, num ); 
    for ( j = 0; j < looping; j++ ) { 
      EEPROM.write( start+j, EEPROM.read(start+4+j)); 
    }
    for ( int k = 0; k < 4; k++ ) { 
      EEPROM.write( start+j+k, 0);
    }
    borradook();
  }
}
boolean comprobar ( byte a[], byte b[] ) {
  if ( a[0] != NULL ) 
    coincide = true; 
  for ( int k = 0; k < 4; k++ ) { // Loop 4 times
    if ( a[k] != b[k] ) 
      coincide = false;
  }
  if ( coincide ) { 
    return true; 
  }
  else  {
    return false; 
  }
}
int buscarids( byte find[] ) {
  int count = EEPROM.read(0); 
  for ( int i = 1; i <= count; i++ ) { 
    leerid(i); 
    if( comprobar( find, guardartarjeta ) ) { 
      
      return i; 
      break; 
    }
  }
}
boolean buscarid( byte find[] ) {
  int count = EEPROM.read(0); 
  for ( int i = 1; i <= count; i++ ) {  
    leerid(i); 
    if( comprobar( find, guardartarjeta ) ) {  
      return true;
      break; 
    }
    else {     
    }
  }
  return false;
}
void guardadook() {
  digitalWrite(Ledazul, LED_OFF); 
  digitalWrite(Ledrojo, LED_OFF); 
  digitalWrite(Ledverde, LED_OFF); 
  delay(200);
  digitalWrite(Ledverde, LED_ON); 
  delay(200);
  digitalWrite(Ledverde, LED_OFF); 
  delay(200);
  digitalWrite(Ledverde, LED_ON); 
  delay(200);
  digitalWrite(Ledverde, LED_OFF); 
  delay(200);
  digitalWrite(Ledverde, LED_ON); 
  delay(200);
}
void falloguardar() {
  digitalWrite(Ledazul, LED_OFF);
  digitalWrite(Ledrojo, LED_OFF); 
  digitalWrite(Ledverde, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
  digitalWrite(Ledrojo, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
  digitalWrite(Ledrojo, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
}
void borradook() {
  digitalWrite(Ledazul, LED_OFF); 
  digitalWrite(Ledrojo, LED_OFF); 
  digitalWrite(Ledverde, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
  digitalWrite(Ledrojo, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
  digitalWrite(Ledrojo, LED_OFF); 
  delay(200);
  digitalWrite(Ledrojo, LED_ON); 
  delay(200);
}
boolean esAdmin( byte test[] ) {
  if ( comprobar( test, tarjetaadmin ) )
    return true;
  else
    return false;
}
void abrirpuerta( int setDelay ) {
  digitalWrite(Ledazul, LED_OFF); 
  digitalWrite(Ledrojo, LED_OFF);	
  digitalWrite(Ledverde, LED_ON);
 digitalWrite(pitido, HIGH); 
  digitalWrite(rele, LOW); 
  delay(1000); // TIEMPO DE SALIDA 1S
  digitalWrite(rele, HIGH);
  digitalWrite(pitido, LOW);
  
}
void fallo() {
  digitalWrite(Ledverde, LED_OFF); 
  digitalWrite(Ledazul, LED_OFF); 
  digitalWrite(Ledrojo, LED_ON); 
  delay(1200);
}