Problema con el modulo HC-05 bluetooth

Buenas, tengo un problema con mi programa de arduino. He estado construyendo un carro controlado por bluetooh con arduino, y le agregue una pantalla lcd donde podia mandar texto por bluetooh. Ambas funciones al mismo tiempo desde una sola app de mi celular.

El programa funciona bien, pero al momento de intentar ccontrolar el carro, al enviar la señal para que avanze el carro desde mi cel, se demora unos segundos en ejecutarlo.

He probado el carro solo, sin el programa de la pantalla lcd, y funciona bien, recibe la señal rapido, creo que el problema esta en el programa de la pantalla lcd

Este es el programa:

#include<Wire.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);

//Variables de control y/o lectura
char valor;
String abi;

int izqA = 5; 
int izqB = 6; 
int derA = 10; 
int derB = 11; 
int vel = 255;            // Velocidad de los motores (0-255)
int estado = 'g';         // inicia detenido


void setup()  {
 pinMode(derA, OUTPUT);
 pinMode(derB, OUTPUT);
 pinMode(izqA, OUTPUT);
 pinMode(izqB, OUTPUT);

 lcd.init();
 lcd.backlight();


 Serial.begin(9600);    // inicia el puerto serial para comunicacion con el Bluetooth
 
}

void loop()  {
 if (Serial.available() > 0) {    // lee el bluetooth y almacena en estado
   estado = Serial.read();
       
   if (estado == 'a') {       // Boton desplazar al Frente
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, vel);  
     analogWrite(izqA, vel);       
   }
   if (estado == 'b') {      // Boton IZQ
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, 0);  
     analogWrite(izqA, vel);      
   }
   if (estado == 'c') {     // Boton Parar
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, 0);    
     analogWrite(izqA, 0); 
   }
   if (estado == 'd') {      // Boton DER
      analogWrite(derB, 0);     
      analogWrite(izqB, 0);
      analogWrite(izqA, 0);
      analogWrite(derA, vel);  
   }

   if (estado == 'e') {      // Boton Reversa
      analogWrite(derA, 0);    
      analogWrite(izqA, 0);
      analogWrite(derB, vel);  
      analogWrite(izqB, vel);      
   }

 }

 if (Serial.available())  //Si el puerto serie (Bluetooth) está disponible
 {
   valor = Serial.read(); //Lee el dato entrante via Bluetooth

   if (valor == 'f')  //Si el dato entrante es una A
   {
     pantalla_LCD();  //Llama la función que muestra el mensaje en la pantalla LCD
   }
 }
}

void pantalla_LCD()
{
 delay(30);
 while (Serial.available())
 {
   char c = Serial.read();  //Lee el dato entrante y lo almacena en una variable tipo char
   abi += c;             //Crea una cadena tipo String con los datos entrates
 }
 if (abi.length() > 0)   //Se verifica que la cadena tipo String tenga un largo mayor a cero
 {
   lcd.clear();             //Borra cualquier mensaje que esté mostrando la pantalla LCD
   lcd.setCursor(0, 0);     //Posiciona el cursor en la Fila 0 y Columna 0 en la pantalla LCD
   lcd.print(abi);      //Muestra el mensaje en la pantalla LCD
   abi = "";            //Limpia la variable para posteriormente leer nuevos datos
 }
}

Movi tu hilo porque respondiste un tema del 2015!!! Sin palabras. No respondas hilos de mas de 120 dias.
Luego debes leer las normas y respetarlas.

Tu problema puede ser al tener dos

if (Serial.available())

ya que dependiendo en que parte del loop se encuentre al momento de llegar el mensaje en el puerto serial, va a entrar en el primer serial available o en el segundo.

No he probado el codigo.

pero intenta esto.

#include<Wire.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);

//Variables de control y/o lectura
char valor;
String abi;

int izqA = 5; 
int izqB = 6; 
int derA = 10; 
int derB = 11; 
int vel = 255;            // Velocidad de los motores (0-255)
int estado = 'g';         // inicia detenido


void setup()  {
 pinMode(derA, OUTPUT);
 pinMode(derB, OUTPUT);
 pinMode(izqA, OUTPUT);
 pinMode(izqB, OUTPUT);

 lcd.init();
 lcd.backlight();


 Serial.begin(9600);    // inicia el puerto serial para comunicacion con el Bluetooth
 
}

void loop()  {
 if (Serial.available() > 0) {    // lee el bluetooth y almacena en estado
   estado = Serial.read();
       
   if (estado == 'a') {       // Boton desplazar al Frente
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, vel);  
     analogWrite(izqA, vel);       
   }
   if (estado == 'b') {      // Boton IZQ
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, 0);  
     analogWrite(izqA, vel);      
   }
   if (estado == 'c') {     // Boton Parar
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, 0);    
     analogWrite(izqA, 0); 
   }
   if (estado == 'd') {      // Boton DER
      analogWrite(derB, 0);     
      analogWrite(izqB, 0);
      analogWrite(izqA, 0);
      analogWrite(derA, vel);  
   }

   if (estado == 'e') {      // Boton Reversa
      analogWrite(derA, 0);    
      analogWrite(izqA, 0);
      analogWrite(derB, vel);  
      analogWrite(izqB, vel);      
   }
   //La accion que del otro serial available esta aqui
   //el resto de codigo no lo he tocado
   if (estado == 'f')  //Si el dato entrante es una A
   {
     pantalla_LCD();  //Llama la función que muestra el mensaje en la pantalla LCD
   }
 }
}

void pantalla_LCD()
{
 delay(30);
 while (Serial.available())
 {
   char c = Serial.read();  //Lee el dato entrante y lo almacena en una variable tipo char
   abi += c;             //Crea una cadena tipo String con los datos entrates
 }
 if (abi.length() > 0)   //Se verifica que la cadena tipo String tenga un largo mayor a cero
 {
   lcd.clear();             //Borra cualquier mensaje que esté mostrando la pantalla LCD
   lcd.setCursor(0, 0);     //Posiciona el cursor en la Fila 0 y Columna 0 en la pantalla LCD
   lcd.print(abi);      //Muestra el mensaje en la pantalla LCD
   abi = "";            //Limpia la variable para posteriormente leer nuevos datos
 }
}

Esto te puede ayudar.