Problema al imprimir en display LCD

Hola buenas tardes.
Tengo un problema al momento de imprimir en la pantalla del LCD, verán mi programa trata de un sistema con clave de seguridad, debe realizar lo siguiente:

Al iniciar el programa, estará un led RGB en rojo indicando que esta encendido el sistema de seguridad. Me debe pedir ingresar un nip o contraseña, En mi primera linea del LCD dira (“Securyty System”) y en mi segunda linea ("PASS: ") una vez ingresado la clave me debe escribir en mi LCD en mi primera linea (“PASS Acepted”), cambiar el color del RGB a verde, enseguida cambiar el texto de mi LCD mostrando en mi primera linea (“Security System”) y en la segunda linea (“OFF”). Después cando presione mi tecla o botón “C” de mi keypad, me preguntará si deseo encender el sistema de seguridad, en mi primera linea de mi display (“System ON?”) y en la segunda linea (“YES(A)/NO(B)”), en caso que sea un “si” con mi tecla “A”, me regresara a mi inicio del programa, regresando el color del RGB a rojo, pidiéndome nuevamente ingresar la contraseña o nip y en el caso de “no” con mi tecla “B” me volverá a mostrar el mensaje de “Sistema de Seguridad Apagado”. Eso es lo que debería hacer mi programa.

Ahora lo que realmente hace, cuando estoy en la parte de volver activar el sistema de seguridad, me sale en mi display (“Security System”) y en la segunda linea (“YES(OFFNO(B)”) cuando debería ser (“System ON?”) y (“YES(A)/NO(B)”), intente corregir eso con la función “lcd.clear()”, hasta creando mi función “borrar()” la cual solo me imprime espacios vacíos, también presiono “A” o “B” y no ejecuta lo indicado anteriormente.

Estoy utilizando un Arduino MEGA2560, LCD 16x2, keypad 4x4 y led RGB.

#include <LiquidCrystal.h>
#include <Keypad.h>

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] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

LiquidCrystal lcd(15, 14, 13, 12, 11, 10);
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char i[4] = {0, 0, 0, 0}; //cuatro digitos de clave
int j = 0;  // posicion del digito teclado
int cont = 0; // conteo de repeticion para ingresar los 4 digitos 
boolean seguridad=true; //seguridad activada 
void borrar() {          // borra todo lo de la pantalla LCD
  lcd.setCursor (0, 0);
  lcd.write("                ");
  lcd.setCursor (0, 1);
  lcd.write("                ");
}
void inicio() {          // comienza con el sistema activado,pidiendo la contraseña 
  lcd.setCursor (0, 0);
  lcd.print("Security System");
  lcd.setCursor (0, 1);
  lcd.print("PASS:");
  cerrado();
  // restablece los valores         
    i[0] = 0;
    i[1] = 0;
    i[2] = 0;
    i[3] = 0;
    j = 0;
    cont = 0;
  seguridad=true;
}
void cerrado() {       //LED RGB Rojo cuando esta cerrado
  analogWrite(44, 255);
  analogWrite(45, 0);
}
void off() {          // Imprime en el LCD que el sistema esta apagado
  lcd.setCursor (0, 0);
  lcd.print("Security System");
  lcd.setCursor (6, 1);
  lcd.print("OFF");
}
void on() {           //pregunta si desea activar el sistema de seguridad 
  lcd.clear();
  lcd.setCursor (2, 1);
  lcd.print("YES(A)/NO(B)");
  lcd.setCursor (1, 0);
  lcd.print("System ON?");
}
void setup() {
  lcd.begin(16, 2);    // LCD de 16x2
  Serial.begin(9600);
  inicio();
}

void loop() {
  while (cont < 4) {

    char key = keypad.getKey(); // se almacena dato de contraseña en variable key
    i[j] = key; // se posiciona la variable key en el arreglo i, en la posicion de j

    if (key) {
      Serial.println(key);
      lcd.setCursor(cont + 5, 1); // se imprime en el LCD, en el segunda fila, en la comulna depende de cont
      lcd.print("*"); // se imprime un "*" para que no se muestre el digito tecleado
      j++; // aunmenta j , para recorrer la posicion del arreglo "i"
      cont++; //aumenta cont, hasta ingresar 4 digitos 
    }
  
  }
  if (i[0] == '2' && i[1] == '1' && i[2] == '2' && i[3] == '1') { //clave para desactivar el sistema de seguridad 

    lcd.setCursor (0, 0);         // imprime en el LCD, clave aceptada
    lcd.print("PASS Accepted");
    lcd.setCursor (0, 1);
    lcd.print("         ");

    analogWrite(44, 0);         // cambia el color del RGB por verde
    analogWrite(45, 255);
    delay(3000);
    seguridad= false;         // desactiva la seguridad
  }else {                     // si la clave es incorrecta
    borrar();
    lcd.setCursor (0, 0);     //imprime en el LCD clave incorrecta
    lcd.print("Incorrect key");
    delay(2000); 
    borrar();        
    inicio();         // regresa y restablece valores 
    
  }
    while (seguridad==false) {         //mientras seguridad este desactivada
      off();                           // imprime en el LCD que esta desactivada la SEguridad
      char hey = keypad.getKey();      // la variable "hey" se le asigna el valor tecleado

      if (hey == 'C') {               // si "hey" es igual a "C"

        
        on();                         // pregunta si activar seguridad
      }

        char var = keypad.getKey(); //almacena en mi variable el valor tecleado
        switch (var) {
          case  'A':        //cuando se teclea "y" que seria mi tecla "A" de  mi keypad
            cerrado();
            borrar();
            inicio();
            break;
          case 'B':         // cuando se presiona "n" que seria mi tecla "B" de mi keypad
            off();
            break;
          default:

            break;
        }

      
    }
  
  
  


}

Espero haya sido claro y si alguien me puede explicar porque sucede esto, estaré agradecido.

Porque creas un nuevo hilo si ya tenías este? http://forum.arduino.cc/index.php?topic=444223.msg3057061#msg3057061

Doble post, hilo cerrado, sigue en el que te puse. Edítalo por favor.