Letrero led bluetooth

Buenas amigos, tengo una duda, he fabricado un letrero con matrices max7219 y el texto se ve perfecto, pero cuando le mando el texto por bluetooth hc-05 solo me muestra una vez, alguna solución para que lo muestre de forma permanente hasta que vuelva a enviar otro texto?, gracias de antemano

#include <MaxMatrix.h>
#include <avr/pgmspace.h>

PROGMEM unsigned char const CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};

int data = 8;    // DIN pin del modulo MAX7219
int load = 9;    // CS pin del modulo MAX7219
int clock = 10;  // CLK pin del modulo MAX7219 

int maxInUse = 7;    //Cambie este valor dependiendo del numero de matrices que use

MaxMatrix m(data, load, clock, maxInUse); // Define el modulo

byte buffer[10];


char mensaje1[] = " PRUEBA LETRERO  "; //Escriba el mensaje a desplegar 
char mensaje2[] = "ARDUINO";

void setup(){
  pinMode(8,OUTPUT);       //Conexion a DIN
  pinMode(9,OUTPUT);       //Conexion a CS
  pinMode(10,OUTPUT);      //Conexion a CLK
  m.init();               // inicializa el modulo
  m.setIntensity(2);      // intensidad de los puntos de la matriz, entre 1-5
  Serial.begin(9600);     // inicializa el puerto serial
}

void loop(){
  byte c;
                                  // Lee el mensaje que llega por el puerto serial
  while (Serial.available() > 0){
    byte c = Serial.read();
    Serial.println(c, DEC);
    printCharWithShift(c, 100);
  }
  delay(100);                 // Tiempo de inicio de un nuevo Ciclo de mensajes
  m.shiftLeft(false, true);
  
  
  // Despliega los mensajes almacenados en las variables 
 
  printStringWithShift(mensaje1, 50);       // El ultimo termino se usa para la velocidad del mensaje 
  printStringWithShift(mensaje2, 50);

}

void printCharWithShift(char c, int shift_speed){    // Imprime caracteres
  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7*c, 7);
  m.writeSprite(maxInUse*8, 0, buffer);
  m.setColumn(maxInUse*8 + buffer[0], 0);
  
  for (int i=0; i<buffer[0]+1; i++) 
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void printStringWithShift(char* s, int shift_speed){        // Imprime cadena de caracteres
  while (*s != 0){
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

void printString(char* s)                            // Imprime cadena
{
  int col = 0;
  while (*s != 0)
  {
    if (*s < 32) continue;
    char c = *s - 32;
    memcpy_P(buffer, CH + 7*c, 7);
    m.writeSprite(col, 0, buffer);
    m.setColumn(col + buffer[0], 0);
    col += buffer[0] + 1;
    s++;
  }
}

Yo armaría el el mensaje con cada caracter recibido en un buffer destinado a tal efecto, que borraría si recibe un nuevo mensaje enviado pero no antes.
Y luego lo reproduciría con printStringWithShift como haces con los dos msg fijos que tienes.

Gracias por tu respuesta, me lo podrías modificar en el código?, estoy muy verde en arduino y no manejo muy bien el lenguaje

Normalmente no haría esto pero supongo que copiaste el código de algun sitio y no sabes como hacerlo.
Prueba a ver si esto funciona
Desde donde esta buffer agrega

byte buffer[10];   // <=== ESTO YA LO TIENES
byte recibido[10];

char mensaje1[] = " PRUEBA LETRERO  "; //Escriba el mensaje a desplegar 
char mensaje2[] = "ARDUINO";

void setup(){
  pinMode(8,OUTPUT);       //Conexion a DIN
  pinMode(9,OUTPUT);       //Conexion a CS
  pinMode(10,OUTPUT);      //Conexion a CLK
  m.init();               // inicializa el modulo
  m.setIntensity(2);      // intensidad de los puntos de la matriz, entre 1-5
  Serial.begin(9600);     // inicializa el puerto serial
}

void loop(){
  byte c;
                                  // Lee el mensaje que llega por el puerto serial
  byte i = 0;                 // <== Nueva linea
  while (Serial.available() > 0){
    byte c = Serial.read();
    recibido[i++] = c;             // <== Nueva linea
    recibido[i]='\0';                 // <== Nueva linea
    Serial.println(c, DEC);
    printStringWithShift(recibido, 50);    // <== Nueva linea
  }
  delay(100);                 // Tiempo de inicio de un nuevo Ciclo de mensajes
  m.shiftLeft(false, true);
  
  
  // Despliega los mensajes almacenados en las variables 
 
  printStringWithShift(mensaje1, 50);       // El ultimo termino se usa para la velocidad del mensaje 
  printStringWithShift(mensaje2, 50);

}

Pruebalo y me dices

Me aparece este error al compilar

LETRERO_OK.ino: In function 'void loop()':
LETRERO_OK:162: error: 'printStringWithShift' was not declared in this scope
LETRERO_OK:170: error: 'printStringWithShift' was not declared in this scope

Parece q no agregaste la libreria Maxmatrix correctamente, verifica nuevamente

Perdón corrijo, había borrado el código de mas abajo el error que aparece es este

sketch_mar24a.ino: In function 'void loop()':
sketch_mar24a:162: error: invalid conversion from 'byte*' to 'char*'
sketch_mar24a:162: error: initializing argument 1 of 'void printStringWithShift(char*, int)'

Porque mientes?

Buenas amigos, tengo una duda, he fabricado un letrero con matrices max7219 y el texto se ve perfecto, pero cuando le mando el texto por bluetooth hc-05 solo me muestra una vez,

Si en realidad el texto iba bien, no puedes ahora tener errores de compilación y consultar por ellos!

En ningún momento he mentido amigo y menos cuando pido ayuda porque no se hacer algo, el primer error lo he puesto porque al copiar la modificación que me has pasado eh borrado todo lo de abajo sin querer, el segundo error es el que me aparece ahora al compilar

Pero dijiste que iba perfecto, eso significa que lo has probado o no lo has probado?

En ningún momento he dicho que el código que me has añadido funcione, lo que yo tenia hecho si funciona, pero al añadir tu código me sale el error al compilar

Vaya que complicado es el castellano!!

Yo me refiero a que el código original tuyo dijiste que funcionaba.
Si funciona entonces como no lo hace la pequeña modificación que te he agregado?

He bajado la librería de este sitio Librerria MaxMatrix
La puse en la misma carpeta que mi proyecto.
La compilo con DEVIOT y SublimeText porque no use habitualmente el IDE.
Y obtengo este resultado con mi leve modificación.

Compilado con DEVIOT 1.2.5

[ Deviot 1.2.5 ] MatrixLed.ino
12:27:46 Compilando el proyecto | Procesando…
D:/Dropbox/Arduino/MatrixLed/MatrixLed.ino: In function ‘void loop()’:
D:/Dropbox/Arduino/MatrixLed/MatrixLed.ino:267:38: warning: invalid conversion from ‘byte* {aka unsigned char*}’ to ‘char*’ [-fpermissive]
D:/Dropbox/Arduino/MatrixLed/MatrixLed.ino:251:8: warning: unused variable ‘c’ [-Wunused-variable]
D:/Dropbox/Arduino/MatrixLed/MatrixLed.ino: In function ‘printStringWithShift.constprop’:
D:\Dropbox\Arduino\MatrixLed\MaxMatrix.cpp:172:25: warning: iteration 79 invokes undefined behavior [-Waggressive-loop-optimizations]
buffer = buffer[i+1];
^
for (i=0; i<80; i++)
^
C:\Users\Bichy.platformio\packages\framework-arduinoavr\cores\arduino\main.cpp: In function ‘main’:
D:\Dropbox\Arduino\MatrixLed\MaxMatrix.cpp:172:25: warning: iteration 79 invokes undefined behavior [-Waggressive-loop-optimizations]
buffer = buffer[i+1];
^
for (i=0; i<80; i++)
^
12:28:03 ÉXITO pero con ADVERTENCIA(s) | Demoró 17.44s[/quote]
Lo que significa que puede funcionar con COMPORTAMIENTO INDEFINIDO como bien dice
Pero lo importante que compila.
Compilado con IDE 1.6.11
> El Sketch usa 4.310 bytes (13%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes.
> Las variables Globales usan 386 bytes (18%) de la memoria dinámica, dejando 1.662 bytes para las variables locales. El máximo es 2.048 bytes.
Sin problemas.
Evidentemente DEVIOT es mas selectivo y hay atributos que no tengo activados o desactivados.

El castellano se entiende perfectamente, te lo vuelvo a explicar de nuevo por si no lo tenias claro, 1- El código que yo adjunté funciona perfectamente 2- Amablemente me adjuntas la modificación 3- Modifico mi código añadiendo el tuyo pensando que tu modificación era hasta el final del programa (con lo cual eliminé parte del código sin tener que hacerlo) 4 - Pido disculpas por mi error y corrijo 5- Me dices que estoy mintiendo 6- A mi al compilar me da el error

sketch_mar24a.ino: In function 'void loop()':
sketch_mar24a:162: error: invalid conversion from 'byte*' to 'char*'
sketch_mar24a:162: error: initializing argument 1 of 'void printStringWithShift(char*, int)'

Gracias de todas formas por tu ayuda Surbyte

Todos no somos como tú de inteligentes...

Aclaro que el problema ha sido solucionado, gracias a la ayuda de Surbyte, pronto os dejaré el código para quien le interese.