afficher un score sur un journal défilant

Bonjour,

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 ?

Merci d’avance

Bonjour,

Il suffit de convertir ton nombre en chaine de caractères par exemple avec sprintf

  int score=45;   // exemple
  char buf[20];
  sprintf(buf,"score: %d",score);
  display(buf);

pepe: score: 50

kamill: Bonjour,

Il suffit de convertir ton nombre en chaine de caractères par exemple avec sprintf

  int score=45;   // exemple
  char buf[20];
  sprintf(buf,"score: %d",score);
  display(buf);

Merci beaucoup Kamill pour ta réponse, dans le char buf[..] je dois pas mettre 50 plutôt ? pour le nombre de caractère du tableau ?

#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

pepe: score: 50

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 ?

Merci d’avance Kamill

un tableau de quoi? de scores ?

Oui exactement !

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 :slight_smile: ):
Antoine: 10 Ernest: 24 Octave: 50 Ciceron: 38