[Aide] Afficher des chiffres de 0 à 9 sur un écran Color LCD Shield

Bonjour, je suis en terminale STI2D sin et mon groupe et moi bloquons sur notre mini-projet.

Nous devons afficher des chiffres de 0 à 9 sur un écran color LCD Shield à l'aide d'un bouton poussoir et d'une led, je m'explique :
Si l'on reste appuyé 3s sur le bouton, la led aura clignoté 3 fois (donc clignotement toutes les 500ms) et le programme comprendra qu'il doit afficher le nombre 3 sur l'écran LCD.

On ne sait pas du tout comment s'y prendre mais on a quand même essayé de faire ce qu'on pouvait avec cet écran...

On a réussi à faire un programme qui affiche le chiffre "1" en permanence et lorsqu'on appuie sur le bouton poussoir le chiffre "2" apparaît et ré-affiche "1" lorsqu'on relâche le bouton. On a aussi essayé d'allumer une led en même temps que le chiffre "2" (donc quand on appuis sur le bouton) mais sans succès...

Voila le programme :

#include "ColorLCDShield.h"
LCDShield lcd;
 int button = 3;  // S1 = 3, S2 = 4, S3 = 5
 int led = 13;
void setup()
{
 // following two required for LCD
 lcd.init(PHILIPS); 
 lcd.contrast(63); // sets LCD contrast (value between 0~63)
}
 
void loop()
{

 if (digitalRead (button)== 1 )
  {
    digitalWrite (led, LOW);
 lcd.setStr("1", 55,60, WHITE, BLACK);

 
 
  }
else {
   digitalWrite (led, HIGH);
 lcd.setStr("2", 55,60, WHITE, BLACK);
 
 
}
}

Voilà la fiche technique de l'afficheur : https://www.sparkfun.com/datasheets/DevTools/Arduino/Color-LCD-Shield-v12.pdf

On pensait à un truc du genre :

for (int i=0; i < 10; i++)
{
        if (digitalRead (button)== 1 )
     {
    digitalWrite (led, LOW); // allume la led
 lcd.setStr("i", 55,60, WHITE, BLACK); // affiche la valeur de i sur l'écran
      }

}

Voilà j'espère que vous avez pu comprendre ce qu'on a essayé de faire haha !

Merci d'avance de l'aide que vous pourrez nous apporter, bonne journée/soirée !

Salut,

Utilisez millis() pour mesuré le temps écoulé à partir de l'appui. Quand il dépasse 1s => afficher 1, 2s => afficher 2 ... Bouton relacher => afficher 0

Bonjour B@tto, tout d'abord, merci de nous avoir répondu.

Nous en avons parlé avec notre prof et il nous a dit que ce n'était pas ce qu'il attendait, il nous a parlé de code Ascii ou d'array ...

On comprend vraiment rien à ces trucs la malgré être allé dans les références et avoir fait des recherches... :disappointed_relieved:

Si quelqu'un qui connait bien cet afficheur LCD peut nous aider ça serait super, merci !!

On continue de chercher de notre côté et nous vous tiendrons au courant si nous trouvons quelque chose. :slight_smile:

Je le connais très bien cette écran, le problème c'est que nous on comprend rien à votre problématique ... Vous venez avec une première problématique, je vous mets sur la vois, et maintenant faut utiliser des array et de l'ASCII : ok mais rapport avec la problématique précédente ? J'ai absolument pas besoin d'array et d'ASCII pour faire un programme performant répondant avec votre première demande. C'est comme vouloir s'acharner à allumer son barbecue avec un silex alors qu'on a un briquet ...

Je dirais même que c'est comme si on avait un lance flammes :grin:

Notre prof nous a imposé comme contrainte d'utiliser du code ascii et array.

J'ai bien conscience que nous pouvons aussi utiliser millis () (nous ne savons d'ailleurs pas non plus comment l'utiliser) mais une nouvelle contrainte nous a été imposée ce matin et nous devons faire avec. :expressionless:

Pensez vous que nous sommes sur la bonne vois avec ce type de boucle ? :

for (int i=0; i < 10; i++)
{
        if (digitalRead (button)== 1 )
     {
    digitalWrite (led, LOW); // allume la led
 lcd.setStr("i", 55,60, WHITE, BLACK); // affiche la valeur de i sur l'écran
      }

}

Forcément, l'écran affichera la lettre "i" et ce n'est pas ce que l'on recherche ... c'est la que notre prof nous a parlé d'ascii et d'array.

Merci d'avance pour votre précieuse aide.

Ok je commence à voir je crois ... Le truc c'est qu'il n'y a aucune conversion à faire, c'est déjà pris en charge par la classe print() intégrée :

for (int i=0; i < 10; i++)
{
        if (digitalRead (button)== 1 )
     {
    digitalWrite (led, LOW); // allume la led
   lcd.background(0,0,0);
   lcd.setCursor(50,50);
   lcd.print(i); // affiche la valeur de i sur l'écran
delay(500);
   }

}

Maintenant si ça convient toujours, cherchez du côté de la fonction itoa() :wink:

Bonjour M. Wack.

Après avoir parlé avec votre professeur principal, nous avons décidé d'appliquer des sanctions et des restrictions d'utilisation du forum Arduino seulement. Il n'y a aucune utilité pédagogique à demander de recopier des codes fournis par des membres de la communauté.

Vous passerez me voir à mon bureau à 8h ce lundi.

CordierG:
Bonjour M. Wack.

Après avoir parlé avec votre professeur principal, nous avons décidé d'appliquer des sanctions et des restrictions d'utilisation du forum Arduino seulement. Il n'y a aucune utilité pédagogique à demander de recopier des codes fournis par des membres de la communauté.

Vous passerez me voir à mon bureau à 8h ce lundi.

Je suis assez surpris par ce genre de réactions : d'une part vos élèves n'ont jamais demandé de code "tout fait", ils proposent leur propre code et nous les aidons à avancer. Et d'autre part visiblement ils partent de zéro ... Donc sans aide (puisque visiblement leur profs leur balancent juste une Arduino et des mots techniques sans rien leur expliquer) comment voulez-vous qu'ils s'en sortent ? Et comment vous faites pour ceux dont le papa est électronicien ? Il n'ont plus le droit de voir leur père jusqu'en juin ?

Sur ce forum nous sommes bien rodés sur les TIPE et autres projets scolaires et nous ne proposons jamais de code tout fait, d'une part parce qu'on a autre chose à foutre, et d'autre part parce ce n'est pas pédagogique.

La pour une fois on a des élèves qui s'y prennent pas en mai (je vous invite à revenir à partir d'avril pour découvrir la masse de glandeur qui prolifère de plus en plus chaque année et qui découvre 2 semaines avant de rendre leur projet qu'ils n'ont rien foutu) et qui font les choses de manière intelligente, et qui vont se faire sanctionner ...

Enfin dernier point : pas cool pour nous puisqu'au lieu d'avoir des topics et des partages d'idées qui peuvent aider l'ensemble de la communauté et les autres débutants, on va recevoir des tonnes de messages privés et d'email ....

Bonjour,
+1
Surprenant comme réaction, il faudrait aussi interdire toutes autres formes de documentations :wink:

Pour donner suite, le professeur m'a écrit pour m'expliquer qu'il ne s'agit pas d'un travail de fin d'année (tout du moins pas encore) et qu'on est plus dans l'exercice et que nos amis ont eu toutes les infos dont ils avaient normalement besoin ...

Bonjour, tout d'abord des explications s'imposent :

Les messages de Cordier.G ne sont rien d'autre qu'une mauvaise blague de certains de nos camarades de classe, je ne pensait pas qu'ils allaient trouver le sujet et je m'excuse du temps qu'il ont pu vous faire perdre.

Pour en revenir au programme (sur lequel nous n'avons eu aucune informations contrairement à ce qui a pu être dit plus haut), Arduino ne reconnait pas les commandes lcd.print (), lcd.setCursor () et lcd.setbackground ().

Voici le message d'erreur :

bouton_1_ino:25: error: 'class LCDShield' has no member named 'background'
bouton_1_ino:26: error: 'class LCDShield' has no member named 'setCursor'
bouton_1_ino:27: error: 'class LCDShield' has no member named 'print'

Nous vous remercions encore de l'aide que vous avez pu nous apporter et de l'aide que vous pourrez nous apporter.

pas de code => pas d'aide possible

C'est comme quand ta voiture est en panne, si t'amène pas ta voiture au garagiste pas moyen qu'il te la répare ...