Mejorar control por voz

Hola gente, estoy interesado en controlar la iluminación de mi casa con un control de voz a través de un programa deAndroid en mi celular. La parte del control de voz viene a ser esta:
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////bluetooth commands/////////////////////////////////////////////////////////
while(Serial.available()){
delay(10);
char c = Serial.read();//c almacena la lectura de la comunicación serial
mensaje += c; //suma el contenido de la variable c en la variable mensaje
}
if(mensaje.length()>0){//verificando que la variable mensaje no está vacía
if((mensaje=="*enciende LED"; ) && (estadoled == LOW)){digitalWrite(led,HIGH);}//interpreta mensaje
else if ((mensaje=="*apagar LED"; ) && (estadoled == HIGH)){digitalWrite(led,LOW); }//y ejecuta instrucciones
}
mensaje="";//resetea variable

//////////////////////////////////////////////////////////////////////////////////////////////////
Funciona perfectamente, pero solo cuando exactamente la frase es "enciende LED" o "apagar LED", no valdría "enciende el LED" o cualquier pequeña diferencia en la frase que el programa tome. La idea sería tener unas variables que me permitieran definir varias palabras clave, y que obviara algunas otras, es decir: Si queremos un comando como por ejemplo "Prende luz de la escalera", importante seria que reconociera "prende" y "escalera", y a ser posible que aceptara más valores como "activar", "encender", etc.

Para estas variables creo que debo utilizar "string", quisiera saber si puedo aplicar una condición
"if (en la frase que recibo por el puerto serial "hay" el número deseado de palabras)" = True.

estoy todavía un poco verde con el tema de programación, y he estado buscando información sobre lo que quiero hacer, pero no lo he sabido encontrar.
Gracias por adelantado

si, puedes, pero si tienes una aplicación de por medio es mil veces mas facil que en la app hagas la busqueda de tus palabras claves y envíes al arduino solo la información importante y siempre la misma

por ejemplo podrías crear una lista de palabras que signifiquen ENCENDER: encender, poner en marcha, prender, activar; otra lista para APAGAR y luego una lista con hubicaciones y luego al arduino envias siempre un mismo código por ejemplo: enciende+UBICACION

al tener unas listas de palabras claves funcionaria bien con (por ejemplo): Enciende la luz del baño por favor

asi en arduino seria mucho mas facil solo hay que leer hasta encontrar + y comparar, solo puede ser o encender o apagar

seguir leyendo hasta encontrar el final de linea, y en un swich ya sabes que ubicación es y que accion

Quizás si sea más fácil que la app seleccione las palabras clave y envíe solo las órdenes clave que necesite el arduino, le echaré un ojo por la tarde . ¿ pero sería también posible lo que yo pregunto? ¿ habría la posibilidad de buscar 2 ( o más palabras) en la cadena de palabras que Arduino lee del puerto serial? Sea mejor o peor me gustaría saber como para aprender nuevas órdenes y maneras de programar. If "encender" or "activar" && "cocina" están en frase) lampara cocina se enciende. Saludos

si, claro que se puede tienes la funcion indexOf() que te devuelve la posición del objeto buscado

String strRecibido = "Encender la luz del pasillo";

strRecibido.toLowerCase();

int orden = strRecibido.indexOf("encender");
int lugar = strRecibido.indexOf("pasillo");

si el valor es -1 es que no se ha encontrado, si es >= a 0 es la posición de la primera letra
aqui tendrias que adaptarlo ya para no comparar con encender sino con todos los elementos de la tabla de acciones y no con pasillo sino con los elementos de la tabla de lugares

Muchas gracias, le echaré un vistazo cuando llegue a casa y a experimentar un poco.