J'ai un programme me permettant d'afficher ce que je veux sur un journal défilant :
#include <SoftwareSerial.h>
const int TXPIN = 3;
const int RXPIN = 2;
SoftwareSerial mySerial(2, 3); // RX, TX
void setup () {
Serial.begin(9600); //Début de la liaison série
mySerial.begin(9600);
}
void loop () {
display("score"); // affiche un message sur l'afficheur
delay(5000);
}
void display(const char *msg)
{
char buf[100]; //mémoire tampon (buffer) reçoit les données entrantes et les stocke en attendant qu'elles soit lues
strcpy(buf, "<ID00><L1><PA><FE><MA><WC><FE>"); //copie buf vers la trame
strcat(buf, msg); //ajoute buf à la fin du message
byte chk = 0;
char *i;
for (i = buf + 6; *i; i++) // calcule le checksum
chk ^= (byte) * i;
sprintf(i, "%02X<E>", chk); // ajoute le checksum et le code de fin
mySerial.println(buf);
} //
Ce programme inclut un calcul de checksum automatique et y me suffit d'écrire ce que je veux après le display et de téléverser pour que ça s'affiche sur mon afficheur.
Ma question aujourd'hui est la suivante, je dois pouvoir afficher sur mon afficheur un score allant de 0 à 50.
Quelqu'un pourrait-il m'aiguiller sur la question ?
#include <SoftwareSerial.h>
const int TXPIN = 3;
const int RXPIN = 2;
int Score = 10; // exemple
char buf[50];
SoftwareSerial mySerial(2, 3); // RX, TX
void setup () {
Serial.begin(9600); //Début de la liaison série
mySerial.begin(9600);
}
void loop () {
sprintf(buf, "Score : %d", Score);
display(buf);
delay(5000);
}
void display(const char *msg)
{
char buf[100]; //mémoire tampon (buffer) reçoit les données entrantes et les stocke en attendant qu'elles soit lues
strcpy(buf, "<ID00><L1><PA><FE><MA><WC><FE>"); //copie buf vers la trame
strcat(buf, msg); //ajoute buf à la fin du message
byte chk = 0;
char *i;
for (i = buf + 6; *i; i++) // calcule le checksum
chk ^= (byte) * i;
sprintf(i, "%02X<E>", chk); // ajoute le checksum et le code de fin
mySerial.println(buf);
} //
Est ce que ça doit ressembler à quelque chose comme ça ?
buf[] doit être dimensionné en fonction de la taille maxi du message que tu penses envoyer.
C'est à toi de l'estimer en fonction de ce que tu vas afficher.
Il vaut mieux prendre de la marge que d'avoir un buffer trop court
kamill:
buf[] doit être dimensionné en fonction de la taille maxi du message que tu penses envoyer.
C'est à toi de l'estimer en fonction de ce que tu vas afficher.
Il vaut mieux prendre de la marge que d'avoir un buffer trop court
Moi je veux afficher différent caractère selon un tableau enfaite, donc je vois pas trop comment estimer le nombre de caractère dont j'ai besoin..
Tu sais comment afficher sur le journal défilant à partir d'un tableau arduino ?
Il suffit de faire une boucle sur les scores à afficher
Par exemple si tu veux afficher le nom des joueurs avec leur score:
const int NBJOUEURS=4;
char *nomJoueurs[NBJOUEURS]=
{
"Antoine",
"Ernest",
"Octave",
"Ciceron"
};
int scores[NBJOUEURS]={10,24,50,38}; // valeurs pour test
char buf[100];
void loop() {
char *p=buf; // pointe sur le début du buffer
for (int j=0; j<NBJOUEURS; j++)
{
p+=sprintf(p,"%s: %d ",nomJoueurs[j],scores[j]);
}
display(buf);
delay(10000);
}
Ce qui va donner (merci pepe ):
Antoine: 10 Ernest: 24 Octave: 50 Ciceron: 38