Bonsoir
Je programme un jeu avec un affichage sur un écran LCD Nokia 5110. Je cherche à afficher un score,du genre "Score : 3 - 2", à partir de deux variables score1 et score2
Comment faire ?
Quelle librairie utilisez vous?
J'utilise les librairies Adafruit :
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Vous avez regardé le code d'exemple ?
(Soit vous fabriquez une chaîne de caractères qui contient ce que vous voulez afficher et vous appelez print sur l'instance de l'écran, soit vous appelez plusieurs fois print pour imprimer bout par bout Le texte et la valeur des variables.)
J-M-L:
Soit vous fabriquez une chaîne de caractères qui contient ce que vous voulez afficher et vous appelez print sur l'instance de l'écran, soit ...)
Oui, c'est ce que j'aimerais faire. Quelle est la syntaxe pour ça ?
Appeler plusieurs fois print me conviendrait si les chaines ou nombres s'affichent à la suite sans qu'il soit nécessaire de repositionner le curseur à chaque fois. Par exemple :
Serial.print("x: ");
Serial.print(icons[f][XPOS], DEC);
Serial.print(" y: ");
Serial.print(icons[f][YPOS], DEC);
Serial.print(" dy: ");
Serial.println(icons[f][DELTAY], DEC);
Dans cet exemple, on fait les print à la chaine sans indiquer où positionner les données affichées. Est-ce bien ça ? Pas besoin de positionner le curseur ?
Vous avez essayé ?
Oui, ça marche, merci !
Je up le post car j'aimerais savoir comment écrire une chaîne de caractères contenant mon score. Par exemple, obtenir "2 - 3" à partir des variables int de score contenant 2 et 3.
// prévoir assez de place, je suppose que chaque score tient au max sur 3 chiffres (0..999)
// on veut fabriquer une chaîne de caractère "xxx - yyy" soit 9 caracteres plus le '\0' de fin = 10
char score[10];
int scoreA, scoreB; // les scores
// utiliser itoa() pour entrer scoreA dans la chaine
...
// utiliser strcat() pour ajouter " - " à cette chaîne
...
// utiliser itoa() (et éventuellement strcat()) pour ajouter scoreB dans la chaine
...
Je vous laisse chercher avec les fonctions mentionnées dans les commentaires comment faire
Merci
Ça doit donner quelque chose comme ça (je limite à 99) :
char code[8];
itoa(score1,code,10);
strcat(code," - ");
itoa(score2,code,10);
strcat(code,"\0");
Et est-ce que ça, ça irait aussi ?
sprintf (code,"%d2 - %d2",score1,score2);
la seconde solution fonctionne mais rajouter en mémoire tout ce qui concerne sprintf et ça prend pas mal de place car la fonction est riche.
la première solution ne fonctionnera pas car le itoa(score2,code,10);
va écraser dans votre chaîne ce qui est déjà là. Donc pour le second score il faut passer par une chaîne intermédiaire et utiliser strcat() ensuite, ou alors donner comme pointeur en mémoire où écrire la fin de la chaîne code
. pour cela vous pouvez utiliser la fonction strlen() qui vous dira combien de caractères vous avez déjà dans votre chaîne.
(il n'y a pas besoin de rajouter le '\0' à la fin, les fonctions itoa()
oustrcat()
en mettent un)
OK, merci
C'est pas intuitif... A quoi sert le \0 ?
Un chaine de caractère c'est juste une suite de codes en mémoire - pour savoir où la chaine se termine il faut un caractère spécial de fin, les concepteurs du langage ont choisi de dire que un octet à 0 marquait cette fin de chaine. On le note '\0', les apostrophes dénotent que c'est un caractère, et Le anti-slash est ce qu'on appelle une Séquence d'échappement en C qui permet de représenter des caractères spéciaux ou un caractère par son code numérique, ici 0
Merci