Bonjour, il me faudrait quelqu'un qui connaisse bien la librairie arduino parola SVP.
j'ai une matrice led 8*32 max72xx, et je suis coincé avec les mots de plus de 5 lettres.
je peux facilement écrire avec P.print les mots courts, et les mots long c'est mort.
pour les mots longs j'utilise le scroll, mais le scroll est une vraie galère, car il scroll indéfiniment. si je le conditionne à une action , par exemple un bouton, il scroll pendant l'appui puis se met en pause.
je voudrais pouvoir faire un scroll du mot une fois pour le lire, et c'est tout.
avez vous une idée ?
merci.
voici le code démo que j'utilise. Là en l'état il défile à l'appui, puis se met en pause au relâchement, puis reprend si j’appuie à nouveau.
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // ICSTATION_HW/ GENERIC_HW / PAROLA_HW
#define MAX_DEVICES 4
#define DATA_PIN 51 // 51 mega 11 uno MOSI GRIS
#define CLK_PIN 52 // 52 mega 13 uno SCLK VIOLET
#define CS_PIN 53 // 53 mega 10 uno SS BLEU
// pin 50 mega pour MISO
byte bouton = 12;
byte etatbouton = 0;
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
// put your setup code here, to run once:
P.begin();
pinMode(bouton, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
etatbouton = digitalRead(bouton);
if (etatbouton == HIGH) {
defilement();
}
}
void defilement() {
if (P.displayAnimate())
P.displayText("Push Start ", PA_RIGHT, 70, P.getPause(), PA_SCROLL_LEFT);
}
Merci, j'avoue ne rien comprendre aux librairies, c'est pour ça que j'en utilise jamais. Mais pour l'affichage c'est bien pratique.
J'ai pas bien saisi la réponse, mais je vais essayer des trucs avec en condition true. Merci
if (P.displayAnimate())
P.displayText("Push Start ", PA_RIGHT, 70, P.getPause(), PA_SCROLL_LEFT);
}
vous dites au code : "quand tu as fini l'animation, relances-en une pour faire défiler du texte
il faudrait tester le bouton : une fois qu'il est appuyé, si vous n'avez pas d'animation En Cours, vous lancez une animation avec P.displayText("Push Start ", PA_RIGHT, 70, P.getPause(), PA_SCROLL_LEFT);
et vous mettez une variable bool à vrai (du genre animationEnCours = true;) et vous attendez que P.displayAnimate() vous dise que l'animation est finie et là vous remettez animationEnCours = false;. comme il n'y aura plus rien à animer, plus rien ne devrait se passer
Dans cette bibliothèque, vous avez également les options :
// myDisplay.setIntensity(0);
//myDisplay.displayClear();// Clear the display
//myDisplay.setInvert(false);
//myDisplay.setTextAlignment(PA_RIGHT);
//myDisplay.setTextAlignment(PA_LEFT);
//myDisplay.setTextAlignment(PA_CENTER);
J'ai utilisé le texte centré dans un projet, c'était le plus pratique pour moi, mais compte tenu de la largeur que la librairie donne à chaque caractère plus un point de séparation entre eux, je trouve très complexe de représenter plus de 5 caractères. La seule option pratique que j'ai trouvée était d'ajouter plus de modules 8x8. Dans plusieurs tests que j'ai fait, c'était la seule solution trouvée.
alors, j'ai compris l'idée (je pense), mais comme à chaque fois dans les librairies, on ne connait rien de la logique du concepteur, j'avoue que le P.displayAnimate je le mets, car j'ai essayé sans, et il se passe rien. si il renvoie une valeur true à la fin de l'animation, je devrais juste dire un truc du genre: if displayAnimate == true; "ne rien faire" non ? j'ai essayé ce que vous m'avez écrit, mais je ne comprends pas comment je vais interférer avec cette biblio ?
en fait je vois sur pleins de pages que displayAnimate renvoie true, mais je ne sais pas ce que ça veut dire. renoyer true où ? dans quoi ? vers quoi ? mystère.
merci pour ce code, je vais l'essayer.mais je ne comprends pas comment displayAnimate sais quelle animation il doit faire ? ou alors je n'ai pas compris sa fonction. comment des "mots" dans un setup, peuvent être lus et trié dans la boucle ?? là j'avoue que ça me dépasse.
ça fait quelques années que je n'ai pas joué avec Parola
de mémoire, les fonctions comme displayText() enregistrent une animation à exécuter avec un certain nombre de paramètres et l'effet d'entrée et de sortie
ensuite P.displayAnimate() se charge de gérer le temps de manière asynchrone (on ne bloque pas le code) et de faire un affichage quand c'est nécessaire en fonction des paramètres donnés comme la vitesse de défilement.
quand toute l'animation est terminée P.displayAnimate() dira true
je ne suis plus sûr si l'animation recommence toute seule dans ce cas mais on pourrait faire un P.displaySuspend() si on veut arrêter vraiment
alors ça fonctionne de cette façon :
à la mise sous tension, le message push to started défile et stop.
une fois appuyé le bouton, STARTED défile et s'arrête.
ensuite c'est bloqué.
mais je ne comprends pas le fonctionnement malheureusement, et cette histoire de valeur TRUE je ne la saisie pas.
oui j'ai lu, je suis dessus encore en ce moment même, mais c'est tout en anglais, et il n'y a pas d'exemple, il n'y a que les conditions, du coup on peut même pas déduire ce qui est attendu.
oui j'ai regardé chaque exemple, mais c'est un sac de noeuds incompréhensible. on ouvre l'exemple scroll, et il y a 850 lignes de codes avec des expressions inconnues pour moi. on ne sait pas ce qui est utile et ce qui ne l'est pas. la seule biblio intéressante est la print minimal, et là on comprend, et on voit bien qu'il faut quasiment rien pour afficher.
j'ai bien vu que pour le scroll, en faisant des tests avec des morceaux par ci par là, que ça se fait en 2 lignes, donc les exemples sont bien trop complexes pour être utilisés.