Secuencia LED via bluetooth

Buenas tardes a todos los que lean este espacio, recurro a ustedes con el fin de preguntar sobre el como hacer para iniciar una secuencia o intermitencia de un LED via bluetooth.

Veo que al enviar un dato desde el Android, el arduino solo lo lee una y solo una vez y esto me impide que una función a parte corra con normalidad, así que, lo que requiero es que cuando se envíe el dato (Letra (texto)); el Arduino sepa que recibió ese dato y debe comenzar con la función, (para que sea rápido y claro, una intermitencia de un LED) hasta que el dato cambie y pare la función.

Arduino lee un caracter por el puerto serie pero tu puedes concatenar los caracteres y leer lo que quieras.

tambien puedes enviar órdenes y que en función de dichas ordenes hagas diferentes acciones.

Olvida el BT por ahora.

Concentrate en manejar el puerto serie y desde el monitor serie enviarle comandos (los que enviará luego x BT tu android) y ya lo tienes resuelto.

Es básicamente lo mismo, el problema o los problemas con eso es que casi no hay foros o vídeos o cualquier otra fuente de información que me permita ver como funciona ese requerimiento y el segundo problema es que lo poco que se encuentra, hace uso de delay(), sin embargo no puedo hacer uso de esto ya que esto detendría el programa, por otra parte yo hago uso de millis().

Tal vez conozca un enlace que me permita leer mas sobre esto u otra fuente de información?

Tu duda cual es? Como leer datos del puerto serie?
En documentación ==> indice de temas tutoriales hay varios tutoriales del tema.

El IDE tambien tiene ejemplos de lectura de datos x puerto serie.

Busca Arduino puerto serie y tendras muchos tutoriales.

Mi duda no es como enviar los datos, eso ya lo puedo hacer, mi duda es como trabajar el dato en el sentido que cuando envío el dato el arduino lo recibe (si), pero por ejemplo recibo el dato 'N' e inicia una función de una intermitencia de un LED no con delay() sino con millis().

El dato lo recibo y lo guardo en una variable (d). Se puso un condicional (if) que si el dato es 'N' inicia la función (void beacon), que es una intermitencia de un LED usando millis().

El problema es que solamente funciona si el dato se recibe y solo en este momento en el que se recibe, como el BT no envía sino el dato una sola vez, pues el LED queda encendido, es decir, la función se detiene o se pausa, tendría que volver a enviar el dato para que se volviera apagar.

La intensión es que cuando yo envíe 'N' inicie la función y que cuando envíe 'M' la función se detenga y ya no se ejecute mas, es decir, que el led quede apagado.

Al revisar lo que me dijo encontré que la gente envía el dato on - off, y eso también ya se logro, ahora lo que se busca es que envíe el dato empezar y detener ciclo.

El dato lo recibo y lo guardo en una variable (d). Se puso un condicional (if) que si el dato es 'N' inicia la función (void beacon), que es una intermitencia de un LED usando millis().

Traduce esto por favor.

un dato por ejemplo 'a' es recibido.

luego preguntas si es 'a' algo asi

if (dato == 'a') 
    // ejecuto una tarea de leds X

y cual es el problema, que tiene qeu ver la condición recibida con tu rutina de intermitencia?

en todo caso, no hablemos en el aire y publica tu código con etiquetas a ver de que estamos hablando mas prácticamente.

He logrado solucionar mi problema, el aporte anterior me llevo al mismo inconveniente, utilizo arduino leonardo.

    int amarillo = 2;
    int verde = 3;
    int rojo = 4;
    int blanco = 5;
    int beaconL = 0;
    int beaconLED = 8;
    unsigned long time0;
    
    char d;                      //variable d = dato enviado desde Android

    void setup(){   
    Serial.begin(9600);
    Serial1.begin(9600);           // Velocidad de transmision de datos kbps
    while(!Serial1){}         
    pinMode(amarillo,OUTPUT);          // led Amarillo
    pinMode(verde,OUTPUT);          // led Verde
    pinMode(rojo,OUTPUT);          // led Rojo
    pinMode(blanco,OUTPUT);          // led blanco
    pinMode(beaconLED,OUTPUT);
    }
  
    void loop() {
    if (Serial1.available()){    // Si, puerto serial 1 (pin 0 = RX && 1 = TX) se encuentra habilitado
    d = Serial1.read();            // lee el dato enviado desde Android
    Serial.println(d);
    }
    
    switch(d){
    case 'H':                  // si dato = H
    digitalWrite(amarillo,HIGH);     // prende led Azul
    digitalWrite(verde,HIGH);      // y apaga los demas leds
    digitalWrite(rojo,HIGH);
    digitalWrite(blanco,HIGH);
    beacon();
    break;
    
    case 'D':                  // si dato = D
    digitalWrite(amarillo,LOW);      // apagamos todos los leds
    digitalWrite(verde,LOW);
    digitalWrite(rojo,LOW);
    digitalWrite(blanco,LOW);
    digitalWrite(beaconLED,LOW);
    break;
    }  
    }
    
    void beacon(){
  switch (beaconL){  // maquina de estados beacon
    case 0: time0 = millis(); // inicio de tarea
                 digitalWrite(beaconLED,HIGH);
                 beaconL = 1;
                 break;
                 
    case 1: if (millis () - time0 > 80){
                digitalWrite(beaconLED,LOW);
                beaconL = 2;
                break;

   case 2: if (millis () - time0 > 2000){
                beaconL = 0;
                break;    
        }    
      }
    }
  }

Esta rutina beacom debe quedar asi, no como la has hecho

void beacon(){
    switch (beaconL){  // maquina de estados beacon
        case 0: time0 = millis(); // inicio de tarea
                digitalWrite(beaconLED,HIGH);
                beaconL = 1;
                break;
                     
        case 1: if (millis () - time0 > 80UL){
                    digitalWrite(beaconLED,LOW);
                    beaconL = 2;
                }
                break;

       case 2: if (millis () - time0 > 2000UL){
                    beaconL = 0;
                }
                break;    
            
    }
}