Aide ColorLCDshield

Bonjour, je suis un éléve de T SI, et je suis actuellement en projet de Science de l'ingénieur.
Pour mon projet j'ai besoin d'arduino, et principalement d'un écran " ColorLCDShield" par sparkfun.
J'ai donc téléchargé la librairie sur le site de sparkfun, et lorsque que je fais import librairie, aucun #include n'apparait comme il le devrait, et aucun exemple ne marche, alors soit je ne l'ai pas installé comme il faut et dans ce cas là j'ai besoin de vous, ou alors j'ai téléchargé la mauvaise chose..

Merci de votre aide !

Bonjour,
Après l'installation de ta librairie, il faut relancer l'IDE Arduino.
As-tu suivi cette procédure ?
@+

Problème résolu, j'ai télécharger une librairie sur un autre site autre que sparkfun, et cette fois-ci ça fonctionne, mais merci de votre message car en effet il faut bienr redemarer ensuite !

Bonjour,

J’ai un autre problème,
je souhaite selon le code suivant, faire un menu à partir de color LCD shield, qui dispose de 3 boutons, et naviguer de menu en menu via les 3 boutons. Voici le code que j’ai actuellement :

#include <ColorLCDShield.h>
#define C_COLOR BLUE
#define BACKGROUND BLACK
#define S_COLOR WHITE

LCDShield lcd;

int bouton[3] = {3, 4, 5}; // S1 = 3, S2 = 4 et S3 = 5

void setup()
{
Serial.begin(9600);
for ( int i=0; i<3; i++)
{
pinMode(bouton*, INPUT);*
_ digitalWrite(bouton*, HIGH);_
_
}_
_
lcd.init(PHILIPS);_
_
lcd.clear(BLACK);_
lcd.setStr(“Menu”, 2, 50, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 85, 18, 49, 5, WHITE);_
lcd.setStr(“1.Medicaments”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Reglages”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Eteindre”, 75, 0, S_COLOR, BACKGROUND);
_
}_
void loop()
_
{_
_
if(!digitalRead(bouton[2]))_
_
Medicament();_
_
if(!digitalRead(bouton[1]))_
_
Reglages();_
_
if(!digitalRead(bouton[0]))_
_
Eteindre();*_

}
void Medicament()
{
* while(digitalRead(bouton[0])&&digitalRead(bouton[1])&&digitalRead(bouton[2]));*
lcd.clear(BLACK);
lcd.setStr(“Medicaments”, 2, 20, C_COLOR, BACKGROUND);
lcd.setRect(5, 112, 18, 18, 5, WHITE);
lcd.setStr(“1.Stock 1”, 35, 0, S_COLOR, BACKGROUND);

if (!digitalRead(bouton[2]))
* Stock1();*

lcd.setStr(“2.Stock 2”, 55, 0, S_COLOR, BACKGROUND);
* if(!digitalRead(bouton[1]))*
* Stock2();*
lcd.setStr(“3.Suivant”, 75, 0, S_COLOR, BACKGROUND);
* if(!digitalRead(bouton[0]))*
* Medicament2();*

}
void Stock1()
{
* lcd.clear(BLACK);*
* delay(100);*
}
void Stock2()
{

}
void Medicament2()
{
}
void Reglages()
{
* lcd.clear(YELLOW);*
}
void Eteindre()
{
* lcd.clear(RED);*
}[/quote]
Dans le void loop, j’ai donc défini une fonction à chaque bouton, et lorsque par exemple j’appuie sur le bouton [2], je vais le void medicament, et à partir du void medicament, si je rappuie sur le bouton[2], je devrais aller dans stock1, or à cause du void loop, il me reste dans le void medicament, ou par exemple lorsque que j’appuie sur le bouton [1], je devrais aller dans le stock2, mais à la place je vais à l’endroit ou le void loop défini. J’ai l’impression de pas être très claire avec mes explications, donc si besoin redemander…
En gros, j’aimerai savoir comment pallier à ce problème, de redefinir en fait que lorsque nous sommes dans la void medicament, le bouton[2] ne nous amene plus dans le void medicament, mais dans le void Stock1. Comme une espèce d’interruption du void loop en fait…
je précise que j’ai essayé de mettre cette partie :
> if(!digitalRead(bouton[2]))
> Medicament();
> if(!digitalRead(bouton[1]))
> Reglages();
> if(!digitalRead(bouton[0]))
> Eteindre();
dans la partie void setup, mais ça ne marche pas…
Merci d’avance de votre aide !

Bonjour,
Lorsque tu es dans medicament et tant que tu n'appuies pas sur un bouton tu y restes.
Dès que tu appuies sur un bouton, il y a peu de chance que tu passes dans un sous menu (grande vitesse d’exécution). Il faudrait mettre un flag (drapeau because sujet sensible pour certain ;)) pour rester dans medicament et prévoir une condition de sortie par BP.
@+

Tout d'abord merci de votre réponse,

mais étant assez nul en programmation avec arduino pour le moment, comment marche le flag ? Je comprend l'idée mais pas comment le faire.

merci !

Re,
Par exemple, tu déclares un boolean

boolean suisDansMedicament = false;

Lorsque tu rentres dans ta fonction medicament(), tu mets suisDansMedicament = true
et dans ton while tu testes suis ta variable est true
Mais il te faut également prévoir une action pour mettre suisDansMedicament à false afin de sortir de ton traitement (action sur un BP)

Merci pour l'aide, j'ai trouvé une autre façon, un peu plus longue mais ça marche quand même, le code n'est pas forcément super otpimisé, et très mal organisé mais au moins ça marche comme il faut.

Dans mon projet je suis censé distribibuer des médicaments selon l'heure, je voulais donc à partir de l'arduino créer une horloge interne avec réglage manuel de base. Sur internet je n'ai trouvé le moyen de l'afficher que via le dessin d'une horloge, or j'aimerais avoir dans un petit coin de mon écran l'heure et si possible la date.

Il me manque en fait la commande pour écrire cette heure. Commande du genre :

Afficher heure, x, y, couleur;
Afficher Minutes, x , y , couleur;
Afficher Seconde x, y, couleur;

Comme si en fait je voulais écrire via la commande :

lcd.setStr("heure", x, y, color, background);

sauf que heure afficher un chiffre et qui change selon l'heure.

Juste ça en fait, merci de votre aide !

Bonjour,

PaulSi:
Afficher heure, x, y, couleur;
Afficher Minutes, x , y , couleur;
Afficher Seconde x, y, couleur;
Comme si en fait je voulais écrire via la commande :
lcd.setStr("heure", x, y, color, background);

Tu peux créer des fonctions :

void afficherHeure(int x, int y, int couleur){

  //ton code

}
void afficherMinute(int x, int y, int couleur){

  //ton code

}
void afficherSeconde(int x, int y, int couleur){

  //ton code

}

Dans ton programme tu pourras les appeler avec ;

afficheHeure(x, y, couleur);
afficheMinute(x, y, couleur);
afficheSeconde(x, y, couleur);

génial, merci beaucoup !

bon, encore un petit problème,
quand j’essaye avec ce que vous m’avez donné, il me met une erreur : “too many arguments to function void afficherHeure()”

Je vous envoie le code en entier, désolé pour le bazar, la non-optimisation et le reste…

#include <ColorLCDShield.h>
#define C_COLOR BLUE
#define BACKGROUND BLACK
#define S_COLOR WHITE
#define HOURS 8
#define MINUTES 29
#define SECONDS 00
#define AMPM 0

LCDShield lcd;

int bouton[3] = {3, 4, 5}; // S1 = 3, S2 = 4 et S3 = 5

int position = 0;

int ssmenu = 0;

int hours, minutes, seconds, ampm;

void setup()
{
Serial.begin(9600);
for ( int i=0; i<3; i++)
{
pinMode(bouton*, INPUT);*
_ digitalWrite(bouton*, HIGH);_
_
}*_

* hours = HOURS;*
* minutes = MINUTES;*
* seconds = SECONDS;*
* ampm = AMPM;*
* lcd.init(PHILIPS);*
* lcd.clear(BLACK);*
* lcd.setStr(“Menu”, 2, 50, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 85, 18, 49, 5, WHITE);_
lcd.setStr(“1.Medicaments”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Reglages”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Eteindre”, 75, 0, S_COLOR, BACKGROUND);*

}
void loop()
{
* if(ssmenu == 0)*
* {*
* if(!digitalRead(bouton[2]))*
* Medicaments();*
* if(!digitalRead(bouton[1]))*
* Reglages();*
* if(!digitalRead(bouton[0]))*
* Eteindre();*

* }*
* if(ssmenu == 1)*
* {*
* if(!digitalRead(bouton[2]))*
* Medicaments();*
* if(!digitalRead(bouton[1]))*
* Reglages();*
* if(!digitalRead(bouton[0]))*
* Eteindre();*
* }*
* if(ssmenu == 101 )*
* {*
* if(!digitalRead(bouton[2]))*
* {*

* }*
* if(!digitalRead(bouton[1]))*
* Medicaments();*
* if(!digitalRead(bouton[0]))*
* Stock2();*
* }*
* if(ssmenu == 1001)*
* {*
* if(!digitalRead(bouton[2]))*
* {}*

* }*
* if(ssmenu == 102)*
* {*
* if(!digitalRead(bouton[2]))*
* {*

* }*
* if(!digitalRead(bouton[1]))*
* Medicaments();*
* if(!digitalRead(bouton[0]))*
* Stock3();*
* }*
* if(ssmenu == 103)*
* {*
* if(!digitalRead(bouton[2]))*
* {*
* }*
* if(!digitalRead(bouton[1]))*
* Suivant();*
* if(!digitalRead(bouton[0]))*
* ReglageJour();*
* }*
* if(ssmenu == 104)*
* {}*
* if(!digitalRead(bouton[2]))*
* {}*
* if(!digitalRead(bouton[1]))*
* {}*
* if(!digitalRead(bouton[0]))*
* {}*
* if(ssmenu == 2) //Medicaments*
* {*
* if(!digitalRead(bouton[2]))*
* Stock1();*
* if(!digitalRead(bouton[1]))*
* Stock2();*
* if(!digitalRead(bouton[0]))*
* Suivant();*
* }*
* if(ssmenu == 3)*
* {*
* if(!digitalRead(bouton[2]))*
* Stock3();*
* if(!digitalRead(bouton[1]))*
* Reglages();*
* if(!digitalRead(bouton[0]))*
* Menu();*
* } *
if(ssmenu == 4)
* {*
* if(!digitalRead(bouton[2]))*
* DateHeure();*
* if(!digitalRead(bouton[1]))*
* {}*
if(!digitalRead(bouton[0]))
* Menu();*
* }*

}
void afficherHeure ()
{
* hours++;*
* if (hours == 12)*
* ampm ^= 1;*
* if (hours >= 24)*
* hours = 1;*
}
void afficherMinute ()
{
}
void Menu()
{
* afficherHeure(5, 85, C_COLOR)
_
lcd.clear(BLACK); _
lcd.setStr(“Menu”, 2, 50, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 85, 18, 49, 5, WHITE);_
lcd.setStr(“1.Medicaments”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Reglages”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Eteindre”, 75, 0, S_COLOR, BACKGROUND);
_
ssmenu = 1;*_

}
void Medicaments()
{
lcd.clear(BLACK);
lcd.setStr(“Medicaments”, 2, 20, C_COLOR, BACKGROUND);
lcd.setRect(5, 112, 18, 18, 5, WHITE);
lcd.setStr(“1.Stock 1”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Stock 2”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Suivant”, 75, 0, S_COLOR, BACKGROUND);

* ssmenu = 2;*
* }*

void Stock1()
{
* lcd.clear(BLACK);*
* lcd.setStr(“Stock 1”, 2, 35, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 94, 18, 33, 5, WHITE);_
lcd.setStr(“1.Combien ?”,35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Retour”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Stock Suivant”, 75, 0, S_COLOR, BACKGROUND);
_
ssmenu = 101;_
_
}_
void Stock2()
_
{_
lcd.clear(BLACK);
lcd.setStr(“Stock 2”, 2, 35, C_COLOR, BACKGROUND);
lcd.setRect(5, 94, 18, 33, 5, WHITE);
lcd.setStr(“1.Combien ?”,35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Retour”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Stock Suivant”, 75, 0, S_COLOR, BACKGROUND);
ssmenu = 102;
_
}_
void Suivant()
_
{_
_
lcd.clear(BLACK);_
lcd.setStr(“Suivant”, 2, 35, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 94, 18, 33, 5, WHITE);_
lcd.setStr(“1.Stock 3”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Reglages Jours”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Menu”, 75, 0, S_COLOR, BACKGROUND);*

ssmenu = 3;
}
void Reglages()
{
* lcd.clear(BLACK);*
* lcd.setStr(“Reglages”, 2, 35, C_COLOR, BACKGROUND);
lcd.setStr(“1.Date & Heure”, 35, 0, S_COLOR, BACKGROUND);
_
lcd.setRect(5, 35, 18, 102, 5, WHITE);_
lcd.setStr(“2.Projet…”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Menu”, 75, 0, S_COLOR, BACKGROUND);*

* ssmenu = 4;*
}
void Stock3()
{
lcd.clear(BLACK);
lcd.setStr(“Stock 3”, 2, 32, C_COLOR, BACKGROUND);
lcd.setRect(5, 94, 18, 34, 5, WHITE);
lcd.setStr(“1.Combien ?”,35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Retour”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Reglages Jours”, 75, 0, S_COLOR, BACKGROUND);

* ssmenu = 103;*
}
void ReglageJour()
{
* lcd.clear(YELLOW);*
* ssmenu = 106;*
}
void DateHeure()
{
* lcd.clear(BLACK);*
* lcd.setStr(“Reglages”, 2, 32, C_COLOR, BACKGROUND);
_
lcd.setRect(5, 32, 18, 100, 5, WHITE);_
lcd.setStr(“1.Date”, 35, 0, S_COLOR, BACKGROUND);
lcd.setStr(“2.Heure”, 55, 0, S_COLOR, BACKGROUND);
lcd.setStr(“3.Retour”, 75, 0, S_COLOR, BACKGROUND);
_
ssmenu = 105;*_

}
void Heure()
{
* }*
void Eteindre()
{
* lcd.clear(RED);*
}[/quote]

Re,

PaulSi:

void afficherHeure ()

{
  hours++;
  if (hours == 12)
    ampm ^= 1;
  if (hours >= 24)
    hours = 1;
}

C'est normal que le compilo ne soit pas content. Tu déclares une fonction sans paramètres et tu l'appelles avec des paramètres

PaulSi:

afficherHeure(5, 85, C_COLOR)

Dans la vie, il faut des choix soit :

  • Tu fais une fonction vide avec des variables globales (déconseillé)
  • ou bien tu fais comme dans mon post précédent
    @+

bonjour, j'ai toujours un problème pour afficher l'heure. Je me suis inspiré du code de l'exemple fourni avec la librairie ColorLCDShield, on y voit une horloge et affiche aussi l'heure de façon analogique. J'ai donc pris les parties de ce code pour pouvoir afficher l'heuren en analogique.

j'ai juste un problème sur une section :

void displayDigitalTime(int h, int m, int s, int ap)
{ char timeChar[12];
if(!ap)
{
sprintf(timeChar, "%.2d:%.2d:%.2d AM", h, m, s);
}
else
{
sprintf(timeChar, "%.2d:%.2d:%.2d PM", h, m, s);
}
}

Quand ce void est plein comme maintenant, il n'y a plus rien d'afficher sur l'écran. En revanche, quand je l'enléve tout remarche comme avant, mais l'heure n'est pas affiché ..

Merci de votre aide !

Bah il faudrait peut-être penser à envoyer l'info au LCD ! Dans l'exemple de la lib il y a une ligne de code en plus :

lcd.setStr(timeChar, CLOCK_CENTER + CLOCK_RADIUS + 4, 22, 
              C_COLOR, BACKGROUND);

c'est pas un hasard ...

Toujours écran noir..

il vous faudrait peut être le code en entier pour comprendre ?

Bin quand t'as un problème sur ta voiture et que tu veux qu'il te la répare, c'est mieux de lui ammener :wink:

Bonsoir !
Bon je commence vraiment à avoir du mal là..
J'ai fait tout un menu mais le code est tellement long que désormais dès que je rajoute une ligne de code pour rajouter un menu l'écran sature..
J'ai utilisé une méthode un peu barbare pour me guider dans les menus, le prof m'a donc conseillé d'utiliser des tableaux, switch et string. Sauf qu'il m'a fait un brouillon auquel je ne comprend mais alors strictement rien..
J'aimerai vous envoyé le code en entier mais il est beaucoup trop long.. Comment pourrais je faire ? je l'héberge sur un site et le met en téléchargement ?
J'ai vraiment besoin de raccourcir le code sinon l'écran beugue complètement.. Merci d'avance de votre aide !

Bonjour,
Pour joindre ton programme tu cliques, en bas de la fenêtre de saisie des message, Additional Options... -> Attach: Parcourir...

Crée simplement des onglets (petit triangle renversé en haut à droite)

Merci, voila il est posté.

LCDcolor2.ino (7.63 KB)