Problème écran tft miroir

Bonjour a tous,
En utilisant l'ID de mon ancien écran tft tactile (2.8 TFT LCD Shield) j'arrive à afficher des choses mais c'est écrit en miroir
J'ai vu déjà plusieurs sujets a propos de ça : comme scanner son ID mais en changeant l'ID l’écran est blanc. J'ai aussi essayé d'inverser XP et XM mais rien n'y fait. Savez vous comment faire ?

Voici le scan :
Il faut mettre tft.begin(0x0000); ou tft.begin(0x4747);?

Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)

reg(0x0000) 47 47	ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00	Manufacturer ID
reg(0x0009) 3F 3F 3F 3F 3F	Status Register
reg(0x000A) 00 00	Get Power Mode
reg(0x000C) 01 01	Get Pixel Format
reg(0x0061) 00 00	RDID1 HX8347-G
reg(0x0062) 80 80	RDID2 HX8347-G
reg(0x0063) 00 00	RDID3 HX8347-G
reg(0x0064) 00 00	RDID1 HX8347-A
reg(0x0065) 00 00	RDID2 HX8347-A
reg(0x0066) 00 00	RDID3 HX8347-A
reg(0x0067) 00 00	RDID Himax HX8347-A
reg(0x0070) 00 00	Panel Himax HX8347-A
reg(0x00A1) 00 00 00 00 00	RD_DDB SSD1963
reg(0x00B0) 00 00	RGB Interface Signal Control
reg(0x00B4) 00 00	Inversion Control
reg(0x00B6) 00 00 00 00 00	Display Control
reg(0x00B7) 00 00	Entry Mode Set
reg(0x00BF) 00 00 00 00 00 00	ILI9481, HX8357-B
reg(0x00C0) 00 00 00 00 00 00 00 00 00	Panel Control
reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00	GAMMA
reg(0x00CC) 00 00	Panel Control
reg(0x00D0) 00 00 00	Power Control
reg(0x00D2) 00 00 00 00 00	NVM Read
reg(0x00D3) 00 00 00 00	ILI9341, ILI9488
reg(0x00D4) 00 00 00 00	Novatek ID
reg(0x00DA) 00 00	RDID1
reg(0x00DB) 00 00	RDID2
reg(0x00DC) 00 00	RDID3
reg(0x00E0) 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03	GAMMA-P
reg(0x00E1) 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49	GAMMA-N
reg(0x00EF) 49 49 49 49 49 49	ILI9327
reg(0x00F2) 10 10 10 10 10 10 10 10 10 10 10 10	Adjust Control 2
reg(0x00F6) 00 00 00 00	Interface Control

Merci d'avance
Bonne soirée

Si l’écran fonctionne avec 0x7575 mais à l'envers, j'imagine que le problème ne viens pas de l'adresse ID ?

Comment veux-tu que quelqu'un te réponde sans que tu aies indiqué quelle librairie tu utilises ? ? ?
Et un lien vers le site d'achat ne serait pas inutile.

Voici mon code de test :

#include <Elegoo_GFX.h>
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.h>


#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0

#define LCD_RESET A4

#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

// Color definitions
#define ILI9341_BLACK       0x0000      /*   0,   0,   0 */
#define ILI9341_NAVY        0x000F      /*   0,   0, 128 */
#define ILI9341_DARKGREEN   0x03E0      /*   0, 128,   0 */
#define ILI9341_DARKCYAN    0x03EF      /*   0, 128, 128 */
#define ILI9341_MAROON      0x7800      /* 128,   0,   0 */
#define ILI9341_PURPLE      0x780F      /* 128,   0, 128 */
#define ILI9341_OLIVE       0x7BE0      /* 128, 128,   0 */
#define ILI9341_LIGHTGREY   0xC618      /* 192, 192, 192 */
#define ILI9341_DARKGREY    0x7BEF      /* 128, 128, 128 */
#define ILI9341_BLUE        0x001F      /*   0,   0, 255 */
#define ILI9341_GREEN       0x07E0      /*   0, 255,   0 */
#define ILI9341_CYAN        0x07FF      /*   0, 255, 255 */
#define ILI9341_RED         0xF800      /* 255,   0,   0 */
#define ILI9341_MAGENTA     0xF81F      /* 255,   0, 255 */
#define ILI9341_YELLOW      0xFFE0      /* 255, 255,   0 */
#define ILI9341_WHITE       0xFFFF      /* 255, 255, 255 */
#define ILI9341_ORANGE      0xFD20      /* 255, 165,   0 */
#define ILI9341_GREENYELLOW 0xAFE5      /* 173, 255,  47 */
#define ILI9341_PINK        0xF81F


#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

//Touch For New ILI9341 TP
#define TS_MINX 120
#define TS_MAXX 900

#define TS_MINY 70
#define TS_MAXY 920

// We have a status line for like, is FONA working
#define STATUS_X 10
#define STATUS_Y 65
#define SUPPORT_8347D



Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

boolean buttonEnabled = true;



void setup() {
  Serial.begin(9600);
  Serial.print("Starting...");

  tft.reset();
  tft.begin(0x7575);
  tft.setRotation(1);

  tft.fillScreen(BLACK); //ecrab noir debut


  tft.drawRect(0, 0, 319, 240, WHITE);
  //Print "Bienvenue" Text
  tft.setCursor(56, 30); //largeur, hauteur
  tft.setTextColor(WHITE);
  tft.setTextSize(4);
  tft.print("Bienvenue");


  tft.setCursor(54, 100);
  tft.setTextColor(RED);
  tft.setTextSize(3);
  tft.print("Elevator-Box");

  //Create Red Button
  tft.fillRect(60, 180, 200, 40, RED);
  tft.drawRect(60, 180, 200, 40, WHITE);

  tft.setCursor(110, 188);
  tft.setTextColor(WHITE);
  tft.setTextSize(3);
  tft.print("badger");

}

void loop()
{
  delay(10);

}

et j'ai acheté l’écranhttps://www.amazon.fr/%C3%89cran-r%C3%A9solution-l%C3%A9cran-tactile-pouces/dp/B07PZFS6JX/ref=sr_1_2_sspa?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=SODIAL+UNO+R3+2%2C8+Ecran+Tactile+TFT&qid=1591804060&quartzVehicle=35-481&replacementKeywords=sodial+r3+2%2C8+ecran+tactile+tft&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFZN0pEU1haWDdBRlYmZW5jcnlwdGVkSWQ9QTA0OTA4MjhXSFRFS05TRDRGVlcmZW5jcnlwdGVkQWRJZD1BMDEwMjA1OTNWVkJFOUc1Nk9OQzEmd2lkZ2V0TmFtZT1zcF9tdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl ici :

Si l'écran fonctionne avec 0x7575 mais à l'envers, j'imagine que le problème ne viens pas de l'adresse ID ?

Ce n'est pas un ID d'adresse, c'est un ID de contrôleur.

Ton vendeur annonce un contrôleur SPFD5408.

Pourquoi utiliser cette librairie alors qu'elle gère les écrans suivants (voir // LCD controller chip identifiers) :

Cherche plutôt une librairie correspondant au contrôleur.
GitHub - JoaoLopesF/SPFD5408: Adafruit Libraries changed to works in TFT 2.4 shields with the SPFD5408 controller for Arduino Uno and Mega (Discontinued library) par exemple.

D'accord merci !
J'ai essayé l’exemple SPFD5408-graphicstest: (j'ai juste mis tft.begin(0x7575); )

Mais le texte apparaît à l'envers (miroir), savez vous pourquoi ?

Bonne journée
Paul

Je ne comprends pas la logique qui te fait choisir 0x7575.

Essaie les autres : 0x9341, etc.

Un code de détection du chip est en commentaires. Il est possible qu'il donne un résultat.

Je ne peux t'en dire plus. Je ne connais pas le SPFD5408.

J'ai choisi 0x7575 car c'est le seul qui fonctionne (mais a l'envers)
N'est-ce pas forcement le bon ID ?
N'y a t'il pas une fonction afin de faire un effet miroir ou des pins a inverser ?

Il faut chercher des pistes sur google :
exemple : https://www.reddit.com/r/arduino/comments/6g0grz/i_got_this_24_tft_lcd_from_ebay_but_i_dont_know/

Merci pour vos réponses mais ça ne marche pas non plus :cry: , en changeant de 1-4 cela pivote juste l’écran

Je crois que j'ai le même écran que lui : Fixing Mirrored / Reversed TFT LCD Arduino Display - YouTube
Mais quand je change en ILI9341 comme il fait, il met erreur et il n'est pas en bleu alors que lui il est en bleu
Savez vous pourquoi ?

Il faudrait essayer d'être un peu plus précis et de faire des phrases compréhensibles.

Qui met erreur ? le compilateur ? la console ? Quelle erreur ?

Qui est en bleu ?

Bonjour,

en effet quand je change cette ligne :
je remplace UTFT myGLCD(ITDB32WC,19,18,17,16); par UTFT myGLCD(ILI9341 ,19,18,17,16); , premièrement ILI9341 n'est pas surligner en bleu et le compilateur met un message d'erreur :

ILI9341 was not declared in this scope.

Alors que sur la vidéo il est en bleu
Connaissez vous la cause ?
Merci d'avance
Bonne journée

ILI9341_8 peut-être ?

Voir les différents types d'écran dans UTFT.H.

Note: si les liens sont sous forme de liens, je n'ai qu'a cliquer dessus. Si c'est sous forme texte, il faut que je fasse un couper, que j'ouvre une nouvelle page, que je colle et que je valide. C'est pour cela que j'ai parfois tendance à ne pas répondre. C'est à toi à faire l'effort (une fois en tout) et pas à tous ceux qui te lisent (365 vues, peut être 100 fois à faire l'effort). C'est très agréable quand on a tout sous la main, et que l'on n'a pas de recherche à faire.

Je suis capable d'écrire une librairie complète pour cet écran, je l'ai fais pour 2 de mes écrans, mais je n'ai strictement rien compris au premier post. Je ne sais pas qui est XP et XM, ni qui sont tous ces registres.


Je crois que j'ai le même écran que lui : https://www.youtube.com/watch?v=9hHlkkEyaGQ
Mais quand je change en ILI9341 comme il fait, il met erreur et il n'est pas en bleu alors que lui il est en bleu
Savez vous pourquoi ?

Ce n'est pas du tout le même écran, car celui de la vidéo est un 480320 alors que celui que tu as donné en lien est un 320240. Les drivers n'admettent pas les deux résolutions. C'est donc forcément un autre driver.


Si ton driver est un SPFD5408 et qu'il n'est pas dans la liste, il est possible qu'il y en ait un qui soit presque le même. C'est pour cela que cela affiche quelque chose, mais pas forcément comme il faut.

Tous les drivers ont des registres permettant d'inverser Gauche-droite et abscisse-ordonnée, ce qui permet les rotation des textes. Quand j'ai écrit ma bibliothèque, j'affiche et ensuite j'ajuste avec ce registre, la rotation... pour avoir le résultat souhaité. On a le driver, c'est assez simple, il faut par contre avoir les autres renseignements. En particulier l'accès va dépendre de la carte Uno ou Mega (à priori si ce module est fait pour s'enficher dessus). Et je n'ai pas ce renseignement. Cela dépend aussi de la bibliothèque utilisée. Mais en changeant de bibliothèque plus rapidement à ce que j'ai pour lire les messages, je ne peux même pas essayer.

2 pistes: -> tu utilises toutes les bibliothèques et tous les drivers, jusqu'à en trouver une qui fonctionne
-> Tu en choisis une qui donne l'affichage à l'envers et je peux éventuellement regarder quelle instruction rajouter après l'initialisation pour changer gauche avec droite. Je ne peux pas adapter ma bibliothèque n'ayant pas le même écran, mais si il y a juste une seule ligne à ajouter c'est possible.

Les deux pistes peuvent être menées de front.

Je pense avoir le même écran : https://www.amazon.fr/gp/product/B01JD4TJZU/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&psc=1

J'ai retrouvé un bout de code de test qui fonctionne sur une UNO, si cela peut aider et si j'ai compris la question.

//=============================================================
char programname[] = "TFT UNO"; 
char programdate[] = "2020/06/12";
//=============================================================
#include <Adafruit_GFX.h>    
#include <Adafruit_TFTLCD.h> 
#include <TouchScreen.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
//==============================================================
void setup(void)
{
  tft.reset();
  int identifier = tft.readID();
  tft.begin(identifier);
}
//==============================================================
void loop(void)
{
  tft.setRotation(0);
  tft.setCursor(0,0);
  EcranTFT_0();
  delay (1000);

  tft.setRotation(1);
  tft.setCursor(0,0);
  EcranTFT_0();
  delay (1000);

  tft.setRotation(2);
  tft.setCursor(0,0);
  EcranTFT_0();
  delay (1000);

  tft.setRotation(3);
  tft.setCursor(0,0);
  EcranTFT_0();
  delay (1000);
}
//======================================================================
void EcranTFT_0() // Ecran_0 : Affichage présentation & nom du programme
{
  tft.fillScreen(0x0000); // Effacement de l'écran
  tft.setTextSize(3);
  
  tft.println(" ");
  tft.println("ESSAI");
  tft.println(" ");
  tft.println(programname);
  tft.println(" ");
  tft.println(programdate);
  tft.println(" ");
  tft.println(" ");
  tft.setTextSize(2);
  tft.print("(c)Philippe MARY");
}
//==============================================================

Presque:
Au lieu de
Je pense avoir le même écran : https://www.amazon.fr/gp/product/B01JD4TJZU/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&psc=1
il faut mettre
Je pense avoir le même écran : https://www.amazon.fr/gp/product/B01JD4TJZU/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&psc=1
Il faut utiliser la petite chaîne à gauche du X2

On est bien d'accord que le programme ci dessus fonctionne mais en miroir?

Maintenant, j'ai besoin des caractéristique de l'écran et pas un écran qui n'est pas le même à chaque fois. Celui du lien ci dessus n'est pas le même que https://www.amazon.fr/Écran-résolution-lécran-tactile-pouces/dp/B07PZFS6JX/ref=sr_1_2_sspa?__mk_fr_FR=ÅMÅŽÕÑ&dchild=1&keywords=SODIAL+UNO+R3+2%2C8+Ecran+Tactile+TFT&qid=1591804060&quartzVehicle=35-481&replacementKeywords=sodial+r3+2%2C8+ecran+tactile+tft&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFZN0pEU1haWDdBRlYmZW5jcnlwdGVkSWQ9QTA0OTA4MjhXSFRFS05TRDRGVlcmZW5jcnlwdGVkQWRJZD1BMDEwMjA1OTNWVkJFOUc1Nk9OQzEmd2lkZ2V0TmFtZT1zcF9tdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl

Et le cela ressemble n'est pas suffisant. Voici la photo de deux écrans:
VMA412s.jpg
Achat au même endroit, même marque, même logo, même sérigraphie... et pourtant la programmation des deux est complètement différente. Avec l'un , on peut remplir la mémoire de 8 façons, avec l'autre d'une seule. L'un a le scrolling, l'autre pas... Et les programmes que je fais pour l'un ne fonctionnent pas sur l'autre et réciproquement.

Il faut connaitre le vrai pilote. A priori, le programme

#include <Adafruit_GFX.h>    
#include <Adafruit_TFTLCD.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
//==============================================================
void setup(void)
{
  Serial.begin(115200);
  tft.reset();
  Serial.println(tft.readID());
}
//==============================================================
void loop(void)
{
}
//======================================================================

devrait déjà donner sur la console réglée à 115200 bauds une idée du nom du driver (la vitesse de la console importe peu pourvu que ce soit la même que celle du programme 115200 ou 9600 ou autre chose...)

Quel est ce nombre affiché?

En fonction de ce nombre, il faudra peut être en chercher un deuxième pour avoir le vrai pilote.

VMA412s.jpg

On est bien d'accord que le programme ci dessus fonctionne mais en miroir?
Mon programme fonctionne normalement ou alors je n'ai pas compris la notion de "en miroir"...

Quel est ce nombre affiché?
en décimal, le nombre est 37697 soit 0x9341

C'est moi qui ai fait une erreur, changement de page, je n'ai plus vu le nom d'origine. J'ai cru que c'était un message de @electronique.

Pour @phm78, tu as un afficheur avec un ILI9341 qui est reconnu par beaucoup de bibliothèques, mais ce n'est pas le cas de @electronique. Il n'a pas du tout le même écran, c'est pour cela que les chaînes sont affichées à l'envers.

J'ai acheté 3 écrans de ce type censé être tous les trois équipés de ILI9341

  • le premier a un ST7781
  • le deuxième a bien un ILI9341
  • le troisième, a encore un autre driver. Comme l'écran est arrivé cassé, je ne peux rien afficher, mais c'est le dialogue avec le driver qui m'indique que ce n'est ni un ILI9341, ni un ST7781.

Comme quoi ce n'est pas si évident.

Bonjour,

Merci pour vos réponses et désolé pour avoir omis de mettre le lien avec le X²

J'ai essayé le bout de code mais l’écran reste blanc.
J'ai scanné l'ID et j'obtiens : 18247 (decimal)

Ps: Comment le convertir en 0x... ? de quel type de nombre s'agit il ?

Merci d'avance
Bonne journée
Paul