led matrice et application android par bluetooth message défilant ?

bonjour,

BUT : écrire un message dans une application android et l'envoyer sur une matrice de leds avec en plus pouvoir agir sur le sens de defilement et d'autres effets.

application gratuite android utilisée: bluetooth spp pro
avantages : configuration possible de boutons, 3 modes d'envoi, c'est l'application que jolliFactory utilise pour sa borne message defilant bicolore : jollifactory blogle sketch arduino est fourni il utilise la librairie ledcontrol qui est incompatible avec mes matrice leds

librairie et type de matrice : la librairie parola qui permet de choisir n'importe quel type de matrice de leds a base de 7219 et qui permet d'appliquer une multitude d'effets au texte défilant

code : la librairie parola fournit une multitude d'exemples pour écrire sur le module à matrice de leds.
celui choisit est l'exemple de texte défilant : on ecrit son texte dans le moniteur série et il apparait sur la matrice, avec en supplement hardware un potentiometre pour regler la vitesse de défilement et 2 boutons poussoirs pour ajouter 2 effets : sens de défilement et inverse du texte : blanc sur fond rouge ou l'inverse.

je suis arrivé a envoyer le texte en remplaçant la liaison série moniteur par un module btooth hc06, je suis bloqué sur la fonction doUI(); qui permet d'applique les effets des bp et du potentiometre, le reglage de vitesse ne m'interesse pas, mais comment "simuler" l'appui sur les boutons par bluetooth, spp pro permet de configurer des boutons pour envoyer une chaine, par exempe si c'est une commande et pas un texte on configure un bouton "#1', si l'uno recoit çà par bluetooth il sait que il doit faire l 'action "P.setInvert(!P.getInvert());" et pas ecrire #1

est-ce possible ? mes connaissances en c étant nulles ....

Merci pour toute aide

le code :

// Use the Parola library to scroll text on the display
//
// Demonstrates the use of the scrolling function to display text received 
// from the serial interface
//
// User can enter text on the serial monitor and this will display as a
// scrolling message on the display.
// Speed for the display is controlled by a pot on SPEED_IN analog in.
// Scrolling direction is controlled by a switch on DIRECTION_SET digital in.
// Invert ON/OFF is set by a switch on INVERT_SET digital in.
//
// Keyswitch library can be found at http://arduinocode.codeplex.com
//
// defilement de gauche à droite, le message est envoyé par appli android
// bluetooth spp pro le hc06 a ete configuré en 57600 baud
#include <MD_Parola.h>
#include <MD_MAX72xx.h> // ATTENTION suivant le modele des matrices il faut choisir
// le modele dans le fichier md max72xx.h, ici ce sont des hc-16
#include <SoftwareSerial.h> //pour mettre hc06 sur pins autres que 0 et 1

SoftwareSerial BT(8, 9);   //pin 8 : virtual RX    pin 9 :  virtual TX
// le tx d'arduino relié au rx du hc06 doit passer par un diviseur a resistances ou un shiftlevel 5v>3v

// set to 1 if we are implementing the user interface pot, switch, etc
#define	USE_UI_CONTROL	0  // pas utilisé ici a mettre a 1 pour utiliser
// en cablant un potentiometre et 2 boutons poussoirs actifs à l'état bas : pullup interne activés
// le nec le plus ultra serait de pouvoir controler a partir d'android
//c'est hors du champ de mes connaissances

#if USE_UI_CONTROL
#include <MD_KeySwitch.h>
#endif

// Turn on debug statements to the serial output
#define  DEBUG  0  // à 1 pour debug avec moniteur

#if  DEBUG
#define	PRINT(s, x)	{ Serial.print(F(s)); Serial.print(x); }
#define	PRINTS(x)	Serial.print(F(x))
#define	PRINTX(x)	Serial.println(x, HEX)
#else
#define	PRINT(s, x)
#define PRINTS(x)
#define PRINTX(x)
#endif

// 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	10
#define	CLK_PIN		13
#define	DATA_PIN	11
#define	CS_PIN		10

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


#define	PAUSE_TIME		1000
#define	SPEED_DEADBAND	5

// Scrolling parameters
#if USE_UI_CONTROL
#define	SPEED_IN	A5
#define	DIRECTION_SET	3	// change the effect bp sur pins 3 et 4
#define	INVERT_SET	4	// change the invert actif etat bas pullup interne
                                // imposé par la lib mdkeyswitch

#endif // USE_UI_CONTROL

uint8_t	frameDelay = 30;	// default frame delay value
textEffect_t	scrollEffect = SCROLL_LEFT;

// Global message buffers shared by Serial and Scrolling functions
#define	BUF_SIZE	75
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];
bool newMessageAvailable = false;

#if USE_UI_CONTROL

MD_KeySwitch uiDirection(DIRECTION_SET); // concerne les commandes hardware
MD_KeySwitch uiInvert(INVERT_SET);

void doUI(void) // fonction principale de lecture et action du pot et des boutons
{
  // set the speed if it has changed
 /* {
    int16_t	speed = map(analogRead(SPEED_IN), 0, 1023, 10, 150);

    if ((speed >= ((int16_t)P.getSpeed() + SPEED_DEADBAND)) || 
      (speed <= ((int16_t)P.getSpeed() - SPEED_DEADBAND)))
    {
      P.setSpeed(speed);
      P.setPause(speed);
      frameDelay = speed;
      PRINT("\nChanged speed to ", P.getSpeed());
    }
  }*/  // on n'utilise pas le pot de changement de vitesse

  if (uiDirection.read() == MD_KeySwitch::KS_PRESS)//  on doit changer pour lire une commande venant 
  // de l'appli android par bluetooth
  {
    PRINTS("\nChanging scroll direction");
    scrollEffect = (scrollEffect == SCROLL_LEFT ? SCROLL_RIGHT : SCROLL_LEFT);
    P.setTextEffect(scrollEffect, scrollEffect);
    P.displayReset();
  }

  if (uiInvert.read() == MD_KeySwitch::KS_PRESS)	// INVERT MODE
  {
    PRINTS("\nChanging invert mode");
    P.setInvert(!P.getInvert());
  }
}
#endif // USE_UI_CONTROL

void readSerial(void) // fonction lecture liaison serie et affichage messsage
{
  static uint8_t	putIndex = 0;

  while (BT.available())
  {
    newMessage[putIndex] = (char)BT.read();
    if ((newMessage[putIndex] == '\n') || (putIndex >= BUF_SIZE-2))	// end of message character or full buffer
    {
      // put in a message separator and end the string
      newMessage[putIndex] = '\0';
      // restart the index for next filling spree and flag we have a message waiting
      putIndex = 0;
      newMessageAvailable = true;
    }
      else
      // Just save the next char in next location
      newMessage[putIndex++];
  }
}

void setup()
{
  BT.begin(9600 );

#if USE_UI_CONTROL
  uiDirection.begin();
  uiInvert.begin();
  pinMode(SPEED_IN, INPUT);

  doUI();
#endif // USE_UI_CONTROL

  P.begin();
  P.displayClear();
  P.displaySuspend(false);

  P.displayScroll(curMessage, LEFT, scrollEffect, frameDelay);

  strcpy(curMessage, "Entrer un message avec votre smartphone");
  newMessage[0] = '\0';

  BT.begin(9600);
  BT.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");
}

void loop() 
{
#if USE_UI_CONTROL
	doUI();
#endif // USE_UI_CONTROL

  readSerial();  // fonction qui lit la liaison série

// ici je sais pas : update du texte ?

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

je sais appliquer l'effet quand je tape "#1" mais forcément le message change et c'est #1 qui s'affiche a la place de l'ancien message

si mes explications sont trop confuses, vous pouvez me le signaler