Problema con comunicacion bluetooth y android.

Buenos dias compañeros.

En este momento necesito de su apoyo ya que esta pasando algo bastante raro con la comunicacion de mi arduino y el modulo bluetooth con mi telefono android.

Realizando pruebas el ejemplo que pondre ahora funciona perfecto.:

//Ejemplo de control de 3 LEDs mediante un módulo bluetooth y un dispositivo Android. SpainLabs.com
 
String dato;                                 //Variable de tipo cadena para guardar los datos recibidos
int rojo= 6;
int naranja= 7;
int verde= 8;
 
void setup() {
  Serial.begin(9600);                        //Iniciamos comunicación serial
   
  //Salidas digitales
  pinMode(rojo, OUTPUT); 
  pinMode(naranja, OUTPUT); 
  pinMode(verde, OUTPUT); 
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW); 
}
 
void loop() {
  while (Serial.available()) { 
    delay(10);
     if (Serial.available() > 0) {
      char c = Serial.read();                //Cuando se recibe un dato, se guarda como carácter
      dato += c;                             //Cadena de caracteres formada por la suma de los datos recibidos 
     }
  }
  if (dato.length() > 0) {                   //Comprueba que la variable "dato" tenga al menos un caracter 
    
    if(dato == "1") {                        //Comparamos la cadena de caracteres con cada uno de los casos
      digitalWrite(rojo, HIGH);       //Enciende el led rojo
      delay (5000);
      Serial.println("1");
      digitalWrite(rojo, LOW);
    }
    if(dato == "2") { 
      digitalWrite(naranja, HIGH);
      delay (5000);
      Serial.println("2");
      digitalWrite(naranja, LOW);
    }
    if(dato == "3") {                        
      digitalWrite(verde, HIGH);
      delay (5000);
      Serial.println("3");
      digitalWrite(verde, LOW);
      
    }
     dato="";  //Declaramos la variable "vacía" para volver a guardar de nuevo caracteres y compararlos con cada uno de los casos
  }
}

Principalmente este ejemplo sencillo recibe del android y envia un dato a el despues de un delay.

Si recibimos "X" dato prende el LED espera un delay de 5 segundos, envia un dato a la aplicacion para saber que se apagara el led y apago el LED.

 if(dato == "2") { 
      digitalWrite(naranja, HIGH);
      delay (5000);
      Serial.println("2");
      digitalWrite(naranja, LOW);
    }

Tengo entendido que para enviar datos del arduino a la app en android, basta con hacer un serial.printl .

El problema esta que cuando saco ese serial.printl de la comparacion para enviar el dato.

Serial.println("Dato");
      digitalWrite(naranja, LOW);

efectivamente lo envia porque lo visualizo en el monitor serial, mas la aplicacion no lo recibe, unicamente recibe el dato dentro del IF. Alguien sabra porque?

Es decir asi no funciona, unicamente recibe mas no envie.

//Ejemplo de control de 3 LEDs mediante un módulo bluetooth y un dispositivo Android. SpainLabs.com
 
String dato;                                 //Variable de tipo cadena para guardar los datos recibidos
int rojo= 6;
int naranja= 7;
int verde= 8;
 
void setup() {
  Serial.begin(9600);                        //Iniciamos comunicación serial
   
  //Salidas digitales
  pinMode(rojo, OUTPUT); 
  pinMode(naranja, OUTPUT); 
  pinMode(verde, OUTPUT); 
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW); 
}
 
void loop() {
  while (Serial.available()) { 
    delay(10);
     if (Serial.available() > 0) {
      char c = Serial.read();                //Cuando se recibe un dato, se guarda como carácter
      dato += c;                             //Cadena de caracteres formada por la suma de los datos recibidos 
     }
  }
  if (dato.length() > 0) {                   //Comprueba que la variable "dato" tenga al menos un caracter 
    
    if(dato == "1") {                        //Comparamos la cadena de caracteres con cada uno de los casos
      digitalWrite(rojo, HIGH);       //Enciende el led rojo
      delay (5000);
      
    }
    if(dato == "2") { 
      digitalWrite(naranja, HIGH);
      delay (5000);
      
    }
    if(dato == "3") {                        
      digitalWrite(verde, HIGH);
      delay (5000);
      
      
    }
     dato="";  //Declaramos la variable "vacía" para volver a guardar de nuevo caracteres y compararlos con cada uno de los casos

Serial.println("1");
      digitalWrite(rojo, LOW);      

Serial.println("2");
      digitalWrite(naranja, LOW);

Serial.println("3");
      digitalWrite(verde, LOW);




  }
}

Supongamos que necesito hacer esto, enciendo todos los led cuando recibo la informacion de la app, y luego que terminen todos los delay, los apago y envio el dato de verificacion para que la app sepa que se apagaron. De esta manera, la app no recibe el dato, pero si se envie y se imprime en el monitor serial..

me parece muy raro esto.
Gracias

Seria mejor si indicas con que modulo estas trabajando,como lo tienes conectado y que aplicacion usas en el mobil.

El modulo que estoy utilizando en un HC-06, conectado en su VCC 5V, GND a tierra, RX al TX del arduino mega, y el TX al RX, los del serial predeterminado que son TX0 y RX0

La aplicacion que estoy utilizando sencilla hecha por mi en app inventor, donde envia y recibe un dato, la tengo configurada para enviar numero del 1 al 7 y recibir del mismo modo.

Todo funciona perfecto dejando el serial.printl dentro del if, cuando lo saco es que presenta problemas no se porque razon.

Tienes que asegurarte de que antes de hacer el print no hayas pasado por dato = "" por que estaras mandando una cadena vacia.Si despues de la linea donde mandas el dato haces un Serial.println(dato) veras por el serial monitor lo que hay realmente en dato y si es correcto o no.Otra cosa,si haces esto:
while (Serial.available() > 0) te puedes ahorrar el if (Serial.available() > 0)