Prise en main d'un ecran tft couleur

Portrait de brossden

J'ai longtemps chercher à faire fonctionner un écran TFT Couleur sur un Arduino Mega j'ai eu pas lu pas mal de tutos sur ce sujet mais rien de bien concluant.

J'ai glaner ici et là des info et j'ai fini par réaliser ce code qui n'est pas achevé cat le tactil n'est pas prise en compte mais c'est prévu pour la suite ainsi que des explications qui sont nécessaires j'en conviens , mais il a le mérite de fonctionner avec plusieurs types d'écran sans modifs

Voici le code en chantier :

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

#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
#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
int Blanc;
int Noir;
int Rouge;
int Vert;
int Bleu;
int Cyan;
int Magenta;
int Jaune;
int Bleu_Clair;
int Rouge_Clair;
int Vert_Clair;
int Rouge_Fonce;
int Vert_Fonce;
int Bleu_Fonce;
uint16_t identifier ;

void setup(void) {
  tft.reset();
  identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(179);
  //tft.setCursor(10, 10);
  tft.setTextColor(0x1F);
  if (tft.width()==480)
  tft.setTextSize(3);
  else
  tft.setTextSize(2);
  tft.print("Identifiant : Num ");
  tft.println(identifier);
  tft.println(" ");
  delay(1000);
  if (identifier == 0x9325) {
    tft.println("ILI9325 LCD driver Trouve");
  } else if (identifier == 0x9328) {
    tft.println("ILI9328 LCD driver Trouve");
  } else if (identifier == 0x4535) {
    tft.println("LGDP4535 LCD driver Trouve");
  } else if (identifier == 0x7575) {
    tft.println("HX8347G LCD driver Trouve");
  } else if (identifier == 0x9341) {
    tft.println("ILI9341 LCD driver Trouve");
  } else if (identifier == 0x7783) {
    tft.println("ST7781 LCD driver Trouve");
  } else if (identifier == 0x8230) {
    tft.println("UC8230 LCD driver Trouve");
  } else if (identifier == 0x8357) {
    tft.println("HX8357D LCD driver Trouve");
  } else if (identifier == 0x0101) {
    identifier = 0x9341;
    tft.println("0x9341 LCD driver Trouve");
  } else if (identifier == 0x9481) {
    tft.println("0x9481 LCD driver Trouve");
  } else if (identifier == 0x9486) {
    tft.println("0x9486 LCD driver Trouve");
  }
  tft.println(" ");
  tft.println("Resolution ecran : "); tft.print(tft.width()); tft.print("x"); tft.print(tft.height());
  delay(5000);
  Blanc   = RVB(0xFFFFFF);
  Noir    = RVB(0x000000);
  Rouge   = RVB(0xFF0000);
  Vert    = RVB(0x00FF00);
  Bleu    = RVB(0x0000FF);
  Cyan    = RVB(0x00FFFF);
  Magenta = RVB(0xFF00B0);
  Jaune   = RVB(0x9F9F18);
  Bleu_Clair  = RVB(0xAFAFFF);
  Rouge_Clair = RVB(0xFFAFAF);
  Vert_Clair  = RVB(0xAFFFAF);
  Rouge_Fonce = RVB(0xE50000);
  Vert_Fonce  = RVB(0x004F00);
  Bleu_Fonce  = RVB(0x00004F);

}

long RVB(long Col) {
  long C;
  long B = (Col & 0xFF) >> 3;
  long V = ((Col & 0xFF00) / 1036);
  long R = ((Col & 0xFF0000) / 539086);
  if (identifier == 38022) {
    C = 0xFFFF ^ (R << 11) + (V << 5) + B ;
  }
  else {
    C = (R << 11) + (V << 5) + B ;
  }return C;
}

void loop() {
  Ecran(Rouge);
  Texte("Rouge", Blanc);
  Ecran(Vert);
  Texte("Vert", Noir);
  Ecran(Bleu);
  Texte("Bleu", Blanc);
  Ecran(Rouge_Fonce);
  Texte("Rouge Fonce", Blanc);
  Ecran(Jaune);
  Texte("Jaune", Noir);
  Ecran(Vert_Fonce);
  Texte("Vert Fonce", Cyan);
  Ecran(Bleu_Fonce);
  Texte("Bleu Fonce", Blanc);
  Ecran(Cyan);
  Texte("Cyan", Rouge);
  Ecran(Magenta);
  Texte("Magenta", Noir);

}
void Ecran(long Couleur) {
  Serial.println(Couleur);
  tft.fillScreen(Couleur);

}

void Texte(String Txt, int Coul) {
  //320x240
  //480*320
  if (tft.width()==480){
  tft.drawRect(80, 145, 300, 30, Coul);
  tft.setCursor(250 - (Txt.length() * 11), 148);
  tft.setTextColor(Coul);
  tft.setTextSize(3);
  tft.print(Txt);}
  else {
     tft.drawRect(53, 97, 200, 20, Coul);
  tft.setCursor(167 - (Txt.length() * 7), 99);
  tft.setTextColor(Coul);
  tft.setTextSize(2);
  tft.print(Txt);
  }
  delay(1000);
}