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();
}
}