atascado con un sketch led-matrix+bluetooth

hola, lo primero confesar que solo llevo con arduino 4 meses y jamas habia tocado el tema de la programacion.
llevo todo este tiempo pegado a la pantalla mirando tutoriales aunque no consigo entender muchas cosas a pesar de leer y releer.
y el caso es que estoy atascado desde hace una semana (soy un poco espeso, los años no perdonan..) con lo siguiente:

tengo un panel led-matrix , ya tengo un sketch con la libreria parola (que me costó una barbaridad hacer que funcione) en el que tengo definidas tres cadenas de texto, cada una asignada a un efecto (parpadeo,scroll,OPENING_CURSOR) y queria implementar bluetooh para poder poner el texto que quiera en cada una de las cadenas.

a traves de una app (RoboRemoFree) hice una interface para el telefono con:
-tres botones, (cada uno de ellos con la intencion de asignar cada efecto)
-un campo para introducir texto (el que se mostrará en cada efecto)
-y un slider para ajustar el brillo.

mediante el sketch "serial event" (incluido en los ejemplos de arduino) consegui leer en el monitor serial de arduino el texto que envia cada boton,el slider y el campo de texto.
y aqui es donde estoy atascado pues no se como hacer para diferenciar lo que mandan cada boton, el slider y el campo de texto , o sea:

-el slider manda numeros del 0 al 15 (tambien puedo hacer que lleve un caracter delante de los numeros, un id),
-el campo de texto manda el texto que se escriba en él,
-y los botones pueden mandar el texto que se elija.

el problema viene cuando intento implementar las condiciones pues no se como hacer para que el texto de un boton se convierta en un comando que asigne un efecto dado al texto escrito en el campo para escribir y que a su vez si escribo en dicho campo no se interprete como un comando o si pongo un numero no se interprete como un numero del slider.

alguien me puede orientar

// introducir el texto deseado siempre entre comillas , letra ñ: \244 , letra Ñ: \245. ejemplo: españa - espa\244a    grados: \11   ü:\201  Ü :\232      

char texto1[20]=      // primer efecto de texto maximo 20 caracteres
  "    efecto1  "


;
char texto2[380]=     //segundo efecto de texto  maximo 380 caracteres

"   efecto2  aqui iria un texto muy largooooooooo probablemente      "


;
char texto3[18]=     // tercer efecto de texto  maximo 18 caracteres

"efecto3"


;
#include <SoftwareSerial.h>
SoftwareSerial SerialBLE(8, 12); // RX, TX
String datosentrada = "";         // a String to hold incoming data
boolean completado = false;  // whether the string is complete

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define MAX_DEVICES 12 //numero de modulos led
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10
#define pot       A6  //pin del potenciometro nivel de luz
int intensidad = 15;


// Hardware SPI connection
MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);


#define ARRAY_SIZE(x)  (sizeof(x)/sizeof(x[0]))

typedef struct
{
  textEffect_t  effect;   // text effect to display
  char *        psz;      // text string nul terminated
  uint16_t      speed;    // speed multiplier of library default
  uint16_t      pause;    // pause multiplier for library default
} sCatalog;

sCatalog  catalog[] =
{
    { PA_FADE,texto1, 5, 1 },

    { PA_SCROLL_LEFT, texto2, 11, 380 },

    { PA_OPENING_CURSOR, texto3, 8, 1700 },
};

void setup(void)
{
  Serial.begin(9600);  //inicializa serial
  SerialBLE.begin(57600);//inicializa bluetooth
  datosentrada.reserve(350);  // reserva 350 bytes para datosentrada de bluetooth:
  P.begin(); //inicializa libreria parola
  P.setInvert(false);

  for (uint8_t i=0; i<ARRAY_SIZE(catalog); i++)
  {
    catalog[i].speed *= 2; //multiplicador velocidad efecto
    catalog[i].pause *= 2; //multiplicador pausa efecto
  }
}

void loop(void)
{

    textPosition_t  just;
    P.setIntensity(500);just = PA_CENTER; 


    for (uint8_t i=0; i<ARRAY_SIZE(catalog); i++)
    {
      P.displayText(catalog[i].psz, just, catalog[i].speed, catalog[i].pause, catalog[i].effect); //catalog[i].effect);

      while (!P.displayAnimate())
        ; // animates and returns true when an animation is completed

   int   valor = analogRead(pot);          // realizar la lectura potenciometro
   intensidad = map(valor, 0, 1023, 0, 15);  // convertir rango
   P.setIntensity(intensidad);
  
      delay(catalog[i].pause/4);
     }
    
    bluetoothevent();
    if (completado) // escribe cuando recibe new line \n del bluetooth
     {
    Serial.println(datosentrada);
    datosentrada = "";   // borra la cadena de texto de entrada
    completado = false;
     }
  
}

void bluetoothevent() 
     {
  while (SerialBLE.available())       // get the new byte:
        { 
    char inChar = (char)SerialBLE.read(); //lee datos enviados por bluetooth 
    datosentrada += inChar;    
    if (inChar == '\n') // if the incoming character is a newline, set a flag so the main loop can do something about it:
    {
      completado = true;
    }
  }
}

entiendo perfectamente los if, el problema es que si en el texto pongo un numero el programa lo confunde con los numeros del slider, ademas de otros problemas como asignar a mis variables texto1, texto2, y texto3 lo que me entra por bluetooth ya que aunque convierta en char la cadena que me entrega de tipo string y lo asigne entonces a mis variables texto1, texto2 etc no funciona,
y dime una cosa, crees que si no entendiese nada a pesar de usar codigo copiado de los ejemplos funcionaria?
porque ese sketch funciona perfectamente, pero sin la parte bluetooth aun.

gracias por tu respuesta, me ha ayudado mucho lo de dar el formato,
el resto voy a estudiarlo.
respecto a lo de partir de la base e ir poco a poco es lo que intento, pero estoy solo en un pueblo que no tiene ni bar y no conozco a nadie que se interese por estos temas asi que no me queda mas remedio que dar vueltas como una peonza por la red, de hecho aterrize en este foro con la idea de aprender algo mas, pues el desorden de la red me impide empezer de una "base", ya sabes cada uno que publica un tutorial empieza por lo que le parece la base pero no existe un consenso comun. aparte de eso la carencia de medios economicos no me permite matricularme en cursos impartidos por personas "reales" .
un saludo y gracias de nuevo.

Lee esto en documentacion => INdice de temas tutoriales => Utilización eficiente del puerto Serial
Hay una muy buena explicación de su uso por Noter y Alfaville

gracias por la ruta de la info.

me estoy volviendo loco, quise empezar de cero a partir de un sketch mas simple y consegui enviar al panel led matrix el texto asi como los identificadores asignados a los botones tal como me aconseja ArduMyth pero ahora sale un extraño caracter delante, que no se de donde narices sale, es parecido a una P pero con un rabito hacia atras en la base. si pulso un boton con el id puesto como b1: me sale:
Pb1:

si escribo "hola" en el campo de texto sale "Phola"

repito, no es una P exactatamente

he pensado usar curMessage.remove(0,1) en el void loop pero no funciona, me devuelve el error:
request for member 'remove' in 'curMessage', which is of non-class type 'char [200]'
no se como hacerlo

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#include <SoftwareSerial.h>
SoftwareSerial SerialBLE(8, 12); // RX, TX




// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define MAX_DEVICES 12
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

// HARDWARE SPI
MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);


// Scrolling parameters

uint8_t scrollSpeed = 25;    // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textEffect_t fade = PA_FADE;
textPosition_t scrollAlign = PA_LEFT;
textPosition_t fadealign = PA_CENTER;
uint16_t scrollPause = 2000; // in milliseconds

// Global message buffers shared by Serial and Scrolling functions
#define	BUF_SIZE	200
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = { "  escribe un texto" };
bool newMessageAvailable = true;


void readBLE(void)
{
  static char *cp = newMessage;

  if (SerialBLE.available())
  {

     *cp = (char)SerialBLE.read();
    if ((*cp == '\n') || (cp - newMessage >= BUF_SIZE-2)) // end of message character or full buffer
    {
      *cp = '\0'; // end the string
      // restart the index for next filling spree and flag we have a message waiting
      cp = newMessage;
      newMessageAvailable = true;
    }
    else  // move char pointer to next position
      cp++;
  }
}

void setup()
{
  Serial.begin(57600);
  SerialBLE.begin(57600); //inicializa bluetooth
  Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");

  P.begin();
  P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
}

void loop()
{
  if (P.displayAnimate())
  {
    if (newMessageAvailable)
    {
      strcpy(curMessage, newMessage);
      newMessageAvailable = false;
    }
    P.displayReset();
  }
  readBLE();
 
}

ya descubri lo que era es caracter, era el comando \r de la app pero como estaba al principio no me daba cuenta que la app lo envia al final.

Esas cosas invisibles son enviadas cuando usamos una terminal Serial RS232. Hay un \r y un \n

un 0x0a y un 0x13, que debes consultar para justamente extraerlos de la cadena útil y que no te perturben en este caso como tu mismo descubriste.

el caso es que lo sabia, que la app enviaba una linea nueva \n y retorno de carro \r pero me despisto el hecho de que el dichoso caracter saliera al principio de los mensajes, luego cuando deduje que era problema de la app me dio por probar a quitar \r y eureka!, luego me di cuenta de que era obvio que la ultima señal de la app se colocase al principio del texto que sale por el panel.
gracias por la info que me habeis pasado sobre las cadenas he conseguido avanzar y discriminar de momento el slider y asignar su valor a la intensidad del brillo, aunque ahora tengo que resolver el problema de que ademas de eso me sustituye el texto del display, cosa que no quiero, :confused: