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.