/* Ultra-novice de l'arduino, je ne m'y suis mis qu'il y à une semaine de celà.
J'ai été confronter au problème de l'affichage des variables sur mon écran Color LCDShield,
et après des jours de recherches et de tentatives de compréhension, le miracle s'est produit !
J'ai donc voulu réalisé ce croquis simple, permettant l'affichage d'une variable allant de 0
à 999, afin de tenter de vous expliquer (avec mes mots de néophyte) comment faire.
Cette explication se veut absolument sans prétention, et si vous rencontrez un problème,
n'hésitez pas à m'envoyer un message sur le site d'Arduino, ce sera un plaisir d'essayer
d'apporter des réponses à vos questions !
Bon code !!
Sketch by Powpowpeuf*/
#include <ColorLCDShield.h> //On inclut la bibliothèque spécifique au Color LCDShield
LCDShield lcd;
int x; /*On déclare la variable que
l'on souhaite afficher au final */
void setup ()
{
lcd.init (PHILIPS); // La routine habituelle
lcd.contrast (-51); // pour initialiser le
lcd.clear(WHITE); // shield
int AffichageVariable(x); /*On déclare la fonction qui va nous
permettre d'afficher la variable x */
}
void loop ()
{
x+=1; //On joue sur notre variable x pour quand
delay(100); //même avoir quelque chose à voir. En l'occurence,
//on l'incrémente de 1 toutes les 0,1 seconde.
AffichageVariable(x); //Notre variable ayant été modifié,
//on réaffiche sa nouvelle valeur
}
void AffichageVariable(int x) //Et on attaque la fonction d'affichage de x !
{
/* xChar sera la ligne (String) affichée.
Entre crochet, on met le nombre de composants
qu'elle contient; 3x (un x pour les unités,
un pour les dizaines et un pour les centaines);
une sorte "d'adptateur" au langage ASCII, que l'on
complètera un peu plus loin; et deux espaces après
nos x, pour éviter que des symboles bizarres
apparaissent (les espaces ne sont pas inscrits dans
la déclaration de xChar)*/
char xChar[6] = {
'x', 'x', 'x', 0x0A };
/Maintenant qu'on a notre string, il faut adapter
notre valeur x, car le langage ASCII ne connait que
les unités; ainsi, pour afficher 152, il nous faut
décomposer notre string en trois unités, grâce aux
formules qui suivent (lors d'une opération arithmétique,
la valeur obtenue est l'entier du résultat de cette
opération, car le type de notre valeur ne permet pas
les virgules.
Ici xChar[0] correspond au centaine, xChar[1] aux dizaines
et xChar[2} aux unités (les chiffres entre crochet déterminent
leur position dans la string et donc dans l'affichage).
D'après les calculs, on obtient :
xChar[0]= 152 / 100 = 1,52 = 1;
xChar[1]=(152 - (1100))/10 = 52 / 10 = 5,2 = 5;
xChar[2]=152 - 100 - 50 = 2.
On obtient bien 152 !*/
xChar[0] = x/100;
xChar[1] = (x - (xChar[0]*100))/10;
xChar[2] = x - (xChar[0]*100) - (xChar[1]*10);
/* Pour que les chiffres indiqués dans la string restent
des chiffres après avoir été encodés selon le langage ASCII,
il faut 0x3A. Le string comporte déjà, 0x0A, il ne reste plus
qu'à appliquer à xChar[0], xChar[1] et xChar[2], 0x30. Ainsi,
on obtient 0x3A.*/
for (int i=0; i<3; i++)
xChar += 0x30;
-
xChar[3] = ' '; //On n'oublie pas les espaces, qu'il faut placer*
-
xChar[4] = ' '; //directement après le dernier xChar[].*
-
lcd.setStr(xChar, 66, 66, BLACK, WHITE); // Et on affiche le tout !!*
-
// Ici, x apparaitra au milieu de l'écran.*
}
[/quote]
Explication_AffichageVariable.ino (3.53 KB)
Affichage_Variable.ino (572 Bytes)