Go Down

Topic: Programmation d'un LCD avec 3 boutons (Read 5133 times) previous topic - next topic

Screampy57

Ahh merci je fais ça et je tiens au courant mais petite question je laisse tout dans mon void setup ?

Screampy57

Salut fdufnews ,
Voila j'ai séparer mes deux switchs comme tu m'as dis,
peux tu m'expliquer la suite stp ?
(Mettre le switch sous condition)
Merci A +
Screampy57

Screampy57

UP s'il vous plaît il me reste une semaine

kamill

Bonjour,

Si ru as séparé le traitement de l'automate de l'affichage comme indiqué par fdufnews, le reste du traitement est simple.
Tu dois avoir un programme qui ressemble à ça:
Code: [Select]
//#define DEBUG
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library


#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin



// Couleurs d'écriture et de fond possible
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

#define initial 0
#define client 1
#define page11 2
#define page12 3
#define page13 4
#define page14 5
#define page21 6
#define page22 7
#define page23 8
#define page24 9
#define technicien 10
#define page31 11
#define page32 12
#define page33 13
#define page34 14
#define page41 15
#define page42 16
#define page43 17
#define page44 18

// évènements pouvant se produire
enum EVT
{
 evt_aucun,
 evt_p,      // appui sur bouton p
 evt_m,      // appui sur bouton m
 evt_ok      // appui sur ok
};

const int boutonp = 35 ;
const int boutonm = 37 ;
const int boutonok = 39 ;

int etat = 0;

unsigned long envoiMessage(char*texte);

#define DEBUG 1
void setup(void) {
#ifdef DEBUG
 Serial.begin(9600);
 Serial.println(F("TFT LCD test"));
 Serial.print("TFT size is ");
 Serial.print(tft.width());
 Serial.println(tft.height());
#endif // DEBUG
 tft.reset();

 pinMode(boutonp, INPUT);
 pinMode(boutonm, INPUT);
 pinMode(boutonok, INPUT);

#ifdef DEBUG
 uint16_t identifier = tft.readID();

 switch (identifier)
 {
   case 0x9325:    Serial.println(F("Found ILI9325 LCD driver")); break;

   case 0x9328:    Serial.println(F("Found ILI9328 LCD driver")); break;

   case 0x7575:    Serial.println(F("Found HX8347G LCD driver")); break;

   case 0x9341:    Serial.println(F("Found ILI9341 LCD driver")); break;

   case 0x8357:    Serial.println(F("Found HX8357D LCD driver")); break;

   default    :    Serial.print(F("Unknown LCD driver chip: "));


     Serial.println(identifier, HEX);
     Serial.print(F("I try use ILI9341 LCD driver "));
     Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
     Serial.println(F("  #define USE_ADAFRUIT_SHIELD_PINOUT"));
     Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
     Serial.println(F("If using the breakout board, it should NOT be #defined!"));
     Serial.println(F("Also if using the breakout, double-check that all wiring"));
     Serial.println(F("matches the tutorial."));
#endif // DEBUG
     identifier = 0x9341;
     break;
 } // fin switch

 tft.begin(identifier);
 tft.setRotation(3);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(2);
 tft.fillScreen(BLACK);

#ifdef DEBUG
 Serial.print(F("Fin Setup                     "));
#endif // DEBUG
}//fin setup


void loop(void)
{
 static bool etatPrecBoutonP = false;
 static bool etatPrecBoutonM = false;
 static bool etatPrecBoutonOK = false;

 bool etatBoutonP = !digitalRead(boutonp); // pour résonner en logique positive
 bool etatBoutonM = !digitalRead(boutonm);
 bool etatBoutonOK = !digitalRead(boutonok);

 EVT evt = evt_aucun;      // évènement
 if (etatBoutonP && !etatPrecBoutonP)
   evt = evt_p;
 if (etatBoutonM && !etatPrecBoutonM)
   evt = evt_m;
 if (etatBoutonOK && !etatPrecBoutonOK)
   evt = evt_ok;

 etatPrecBoutonP = etatBoutonP;
 etatPrecBoutonM = etatBoutonM;
 etatPrecBoutonOK = etatBoutonOK;

 if (evt != evt_aucun)
 {
   switch (etat)
   {
     case initial:
       switch (evt)
       {
         case evt_p: etat = client; break;
         case evt_m: etat = technicien; break;
       }
       break;

     case client:
       switch (evt)
       {
         case evt_p: etat = page11; break;
         case evt_m: etat = page21; break;
         case evt_ok: etat = initial; break;
       }
       break;

     case technicien:
       switch (evt)
       {
         case evt_p: etat = page31; break;
         case evt_m: etat = page41; break;
         case evt_ok: etat = initial; break;
       }
       break;

     case page11:
       switch (evt)
       {
         case evt_p: etat = page12; break;
         case evt_m: etat = client; break;
         case evt_ok: etat = initial; break;
       }
       break;

     // autres cas
     // traiter ici
     // ...

     default:
       switch (evt)
       {
         case evt_p: break;
         case evt_m: break;
         case evt_ok: etat = initial; break;
       }
       break;
   }
 }

 // affichage de la page
 tft.setCursor(0, 0);
 switch (etat)
 {
   case initial:
     tft.println("  Bonjour,               ");
     tft.println("  Selectionner votre mode");
     tft.println("  de formation           ");
     tft.println("                         ");
     tft.println("  -Client --> +          ");
     tft.println("  -Technicien --> -      ");
     tft.println("                         ");
     tft.println("  Le bouton + est celui  ");
     tft.println("  du HAUT, le - est celui");
     tft.println("  du MILIEU et le OK est ");
     tft.println("  celui du BAS           ");
     tft.println("                         ");
     tft.println("                         ");
     tft.println("  Cree par HEINTZ Robin  ");
     tft.println("  Classe de BTS SN       ");
     break;

   case client:
     tft.println("Client                   ");
     tft.println("                        X");
     tft.println("                       X ");
     tft.println("                      X  ");
     tft.println("                     X   ");
     tft.println("                    X    ");
     tft.println("                   X     ");
     tft.println("                  X      ");
     tft.println("                 X       ");
     tft.println("                X        ");
     tft.println("               X         ");
     tft.println("              X          ");
     tft.println("             X           ");
     tft.println("            X            ");
     tft.println("           X             ");
     tft.println("          X              ");
     break;

   case technicien:
     tft.println("technicien               ");
     tft.println(" X                       ");
     tft.println("  X                      ");
     tft.println("   X                     ");
     tft.println("    X                    ");
     tft.println("     X                   ");
     tft.println("      X                  ");
     tft.println("       X                 ");
     tft.println("        X                ");
     tft.println("         X               ");
     tft.println("          X              ");
     tft.println("           X             ");
     tft.println("            X            ");
     tft.println("             X           ");
     tft.println("              X          ");
     tft.println("               X         ");
     break;

   case page11:
     tft.println("11                       ");
     tft.println("                        X");
     tft.println("                       X ");
     tft.println("                      X  ");
     tft.println("                     X   ");
     tft.println("                    X    ");
     tft.println("                   X     ");
     tft.println("                  X      ");
     tft.println("                 X       ");
     tft.println("                X        ");
     tft.println("               X         ");
     tft.println("              X          ");
     tft.println("             X           ");
     tft.println("            X            ");
     tft.println("           X             ");
     tft.println("          X              ");
     break;

   // traitement des autres pages
   // .......

   default:
     tft.println ("Erreur                        ");
     break;
 }
}//fin loop


unsigned long envoiMessage(char*texte)
{

 unsigned long start = micros();


 tft.println(texte);

 return micros() - start;
}//fin envoimessage


Screampy57

Salut, de retour,
j'ai un petit soucis concernant le code que tu m'a filé, j'ai fait tout ce que tu m'a dis mais le problème c'est que quand je change de page, le texte se superpose avec le précédent et ainsi de suite
As tu une réponse a ce problème ?

kamill

Bonjour,

Tu as bien fait un  tft.setTextColor(WHITE, BLACK); ?

Screampy57

Oui je l'ai fait et par contre quand j'ai fait ca mon texte s'affiche puis se coupe en boucle ..

kamill

Je ne vois pas trop ce que tu veux dire.
Quand tu donnes la couleur de fond dans setTextColor ça efface ce qui se trouve en dessous.

Screampy57

Oui ca je l'ai fait mais la le probleme c'est que mon programme redémarre en boucle, mais par contre il redémarre ou je me suis arrete
Exemple: je vais sur la page technicien, il redémarre en boucle sur technicien

Screampy57

Voici mon code :

Code: [Select]
//#define DEBUG
#include <Adafruit_GFX.h>// Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library


#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin



// Couleurs d'écriture et de fond possible
#define BLACK 0x0000
#define BLUE0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN0x07FF
#define MAGENTA 0xF81F
#define YELLOW0xFFE0
#define WHITE 0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

#define initial 0
#define client 1
#define page11 2
#define page12 3
#define page13 4
#define page14 5
#define page21 6
#define page22 7
#define page23 8
#define page24 9
#define technicien 10
#define page31 11
#define page32 12
#define page33 13
#define page34 14
#define page41 15
#define page42 16
#define page43 17
#define page44 18

// évènements pouvant se produire
enum EVT
{
evt_aucun,
evt_p,// appui sur bouton p
evt_m,// appui sur bouton m
evt_ok// appui sur ok
};

const int boutonp = 35 ;
const int boutonm = 37 ;
const int boutonok = 39 ;

int etat = 0;

unsigned long envoiMessage(char*texte);

#define DEBUG 1
void setup(void) {
#ifdef DEBUG
Serial.begin(9600);
Serial.println(F("TFT LCD test"));
Serial.print("TFT size is ");
Serial.print(tft.width());
Serial.println(tft.height());
#endif // DEBUG
tft.reset();

pinMode(boutonp, INPUT);
pinMode(boutonm, INPUT);
pinMode(boutonok, INPUT);

#ifdef DEBUG
uint16_t identifier = tft.readID();

switch (identifier)
{
case 0x9325:Serial.println(F("Found ILI9325 LCD driver")); break;

case 0x9328:Serial.println(F("Found ILI9328 LCD driver")); break;

case 0x7575:Serial.println(F("Found HX8347G LCD driver")); break;

case 0x9341:Serial.println(F("Found ILI9341 LCD driver")); break;

case 0x8357:Serial.println(F("Found HX8357D LCD driver")); break;

default:Serial.print(F("Unknown LCD driver chip: "));


Serial.println(identifier, HEX);
Serial.print(F("I try use ILI9341 LCD driver "));
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F("#define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
#endif // DEBUG
identifier = 0x9341;
break;
} // fin switch


tft.begin(identifier);
tft.setRotation(3);
tft.setTextSize(2);
tft.fillScreen(BLACK);


#ifdef DEBUG
Serial.print(F("Fin Setup   "));
#endif // DEBUG
}//fin setup


void loop(void)
{
static bool etatPrecBoutonP = false;
static bool etatPrecBoutonM = false;
static bool etatPrecBoutonOK = false;

bool etatBoutonP = !digitalRead(boutonp); // pour résonner en logique positive
bool etatBoutonM = !digitalRead(boutonm);
bool etatBoutonOK = !digitalRead(boutonok);

EVT evt = evt_aucun;// évènement
if (etatBoutonP && !etatPrecBoutonP)
evt = evt_p;
if (etatBoutonM && !etatPrecBoutonM)
evt = evt_m;
if (etatBoutonOK && !etatPrecBoutonOK)
evt = evt_ok;

etatPrecBoutonP = etatBoutonP;
etatPrecBoutonM = etatBoutonM;
etatPrecBoutonOK = etatBoutonOK;

if (evt != evt_aucun)
{
switch (etat)
{
case initial:
switch (evt)
{
case evt_p: etat = client; break;
case evt_m: etat = technicien; break;
}
break;

case client:
switch (evt)
{
case evt_p: etat = page11; break;
case evt_m: etat = page21; break;
case evt_ok: etat = initial; break;
}
break;

SWITCH GESTION BOUTON

Code: [Select]
case page44:
switch (evt)
{
case evt_p: etat = initial; break;
case evt_m: etat = page43; break;
case evt_ok: etat = initial; break;
}
break;

default:
switch (evt)
{
case evt_p: break;
case evt_m: break;
case evt_ok: etat = initial; break;
}
break;
}
}

// affichage de la page
tft.setCursor(0, 0);


tft.setTextColor(WHITE, BLACK);


switch (etat)
{
 
case initial:

tft.println("Bonjour et bienvenue,");
tft.println("Selectionner votre mode");
tft.println("de formation:");
tft.println(" ");
tft.println("-CLIENT --> +");
tft.println("-TECHNICIEN --> -");
tft.println(" ");
tft.println("Le bouton + est celui");
tft.println("du HAUT, le - est celui");
tft.println("du MILIEU et le OK est ");
tft.println("celui du BAS ");
tft.println(" ");
tft.println(" ");
tft.println("Cree par HEINTZ Robin");
tft.println("Classe de BTS SN ");

break;

case client:

tft.println("Vous etes actuellement ");
tft.println("dans le menu CLIENT");
tft.println(" ");
tft.println("Pour decouvrir:");
tft.println(" -Les fonctionalites des ");
tft.println("elements de la maquette");
tft.println("appuyez sur le bouton");
tft.println("+(HAUT)");
tft.println(" ");
tft.println(" -Les fonctionnalites du ");
tft.println("logiciel VISOR appuyez ");
tft.println("sur le bouton -(MILIEU)");
tft.println(" ");
tft.println(" -Sinon appuyez sur OK ");
tft.println("(BAS) pour l'accueuil");


break;

SWITCH AFFICHAGE

Code: [Select]
tft.println ("Erreur   ");
 break;

 
}
}//fin loop


unsigned long envoiMessage(char*texte)
{

unsigned long start = micros();


tft.println(texte);

return micros() - start;
}//fin envoimessage








kamill

Tu as modifié tes textes par rapport à la version précédente. Auparavant les textes prenaient toute la ligne, maintenant les textes sont plus cours, donc n'effacent plus les textes précédents.

Donc il faut effacer l'écran avant affichage, mais il ne faut le faire que si on a changé d'état autrement ça va s'effacer et s'afficher en permanence.

Ca donne un programme comme ça:
Code: [Select]

void loop(void)
{
  static bool etatPrecBoutonP = false;
  static bool etatPrecBoutonM = false;
  static bool etatPrecBoutonOK = false;

  bool etatBoutonP = !digitalRead(boutonp); // pour résonner en logique positive
  bool etatBoutonM = !digitalRead(boutonm);
  bool etatBoutonOK = !digitalRead(boutonok);

  EVT evt = evt_aucun;// évènement
  if (etatBoutonP && !etatPrecBoutonP)
    evt = evt_p;
  if (etatBoutonM && !etatPrecBoutonM)
    evt = evt_m;
  if (etatBoutonOK && !etatPrecBoutonOK)
    evt = evt_ok;

  etatPrecBoutonP = etatBoutonP;
  etatPrecBoutonM = etatBoutonM;
  etatPrecBoutonOK = etatBoutonOK;

  if (evt != evt_aucun)
  {
    Serial.print("evt: "); Serial.println(evt);
    switch (etat)
    {
      case initial:
        switch (evt)
        {
          case evt_p: etat = client; break;
          case evt_m: etat = technicien; break;
        }
        break;

      case client:
        switch (evt)
        {
          case evt_p: etat = page11; break;
          case evt_m: etat = page21; break;
          case evt_ok: etat = initial; break;
        }
        break;
      case page44:
        switch (evt)
        {
          case evt_p: etat = initial; break;
          case evt_m: etat = page43; break;
          case evt_ok: etat = initial; break;
        }
        break;

      default:
        switch (evt)
        {
          case evt_p: break;
          case evt_m: break;
          case evt_ok: etat = initial; break;
        }
        break;
    }
  }

  // affichage de la page
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE, BLACK);

  static int etatPrec = -1;
  if (etat != etatPrec)
  {
    tft.fillScreen(BLACK);
    switch (etat)
    {

      case initial:

        tft.println("Bonjour et bienvenue,");
        tft.println("Selectionner votre mode");
        tft.println("de formation:");
        tft.println(" ");
        tft.println("-CLIENT --> +");
        tft.println("-TECHNICIEN --> -");
        tft.println(" ");
        tft.println("Le bouton + est celui");
        tft.println("du HAUT, le - est celui");
        tft.println("du MILIEU et le OK est ");
        tft.println("celui du BAS ");
        tft.println(" ");
        tft.println(" ");
        tft.println("Cree par HEINTZ Robin");
        tft.println("Classe de BTS SN ");

        break;

      case client:

        tft.println("Vous etes actuellement ");
        tft.println("dans le menu CLIENT");
        tft.println(" ");
        tft.println("Pour decouvrir:");
        tft.println(" -Les fonctionalites des ");
        tft.println("elements de la maquette");
        tft.println("appuyez sur le bouton");
        tft.println("+(HAUT)");
        tft.println(" ");
        tft.println(" -Les fonctionnalites du ");
        tft.println("logiciel VISOR appuyez ");
        tft.println("sur le bouton -(MILIEU)");
        tft.println(" ");
        tft.println(" -Sinon appuyez sur OK ");
        tft.println("(BAS) pour l'accueuil");


        break;
      default:
        tft.print("etat "); tft.println(etat);
        break;
    }
    etatPrec = etat;
  }

}//fin loop

Go Up