Problemas con Keypad, lcd y contraseña

Hola, soy bastante nueva con el arduino y estoy realizando un proyecto con arduino uno, que incluye un keypad y un lcd. Intente añadirle una contraseña, la cual quiero que aparezca en el lcd. Llegue a realizar que sea posible el añadir los números y que salgan en el lcd, pero cada vez que intento añadirle una contraseña, no funciona. Quería saber como hacerlo y si quizás mi código está mal. Gracias.

#include <Keypad.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Servo servo;
byte C4 = 7;
byte C3 = 6;
byte C2 = 5;
byte C1 = 4;
byte R4 = 8;
byte R3 = 9;
byte R2 = 2;
byte R1 = 3;
int pinServo = 10;

unsigned long anterior = 0;

#define I2C_ADDR 0x27

LiquidCrystal_I2C lcd(I2C_ADDR,16,2);
const byte ROWS2 = 4;
const byte COLS2 = 4;

char keys2[ROWS2][COLS2] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

byte rowPins2[ROWS2] = {9, 8, 7, 6};
byte colPins2[COLS2] = {5, 4, 3, 2};

Keypad keypad = Keypad( makeKeymap(keys2), rowPins2, colPins2, ROWS2, COLS2 );

int estado = 0;
String leido = "";

void setup() {
Serial.begin(9600);
keypad.setHoldTime(250);
servo.attach(pinServo);
lcd.init();
lcd.backlight();
}

void loop() {
switch (estado) {
case 0:
leer();
break;
case 1:
comprobar();
break;
case 2:
moverServo();
break;
}
}

void leer() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Codigo: ");
lcd.setCursor(0, 1);
servo.write(180);
delay(2000);
leido = "";
while (true) {
char tecla = keypad.getKey();
if ( tecla ) {
lcd.print('*');
leido += tecla;
if ( leido.length() == 4) {
break;
}
}
}
estado = 1;
}

void comprobar() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Comprobando...");
Serial.println(leido);
while (Serial.available() == 0) {}
if ( Serial.readString() == "1"){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Perfecto");
delay(1000);
estado = 2;
}else{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error");
delay(1000);
estado = 0;
}
}

void moverServo() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sacando chicle...");
servo.write(45);
delay(2000);
estado = 0;
}

Moderador:
Por favor, lee las Normas del foro y edita tu código usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Ya miro tu código y te hago una devolución.

Ingresas 4 digitos en leer() pero en comprobar no compruebas, esperas un nuevo ingreso y si es "1" dices que esta perfecto.
Deberías chequear lo que tiene tu variable String.