Salut à tous.

Je n'ai aucun problème de fonctionnement de mon TFT 1.8" de chez Joy-It.
Je gère mon TFT 1.8" avec mon NodeMCU ESP32. Le driver est le ST7735.

J'ai réécrit la totalité de la bibliothèque TFT et a priori, cela fonctionne relativement bien.

J'ai un problème de compréhension avec les couleurs.
J'ai fait le choix de travailler avec le mode 18 bits.
Dans le paramétrage de base, j'envoie deux paramètres qui sont :

a) commande "COLMOD" (0x3A) avec la valeur 0x06.
Cette valeur correspond au 18 bit-pixel.

b) commande "MADCTL (0x36) avec la valeur 0xC8.
Le "C" me permet de mettre l'affichage dans le bon sens.
Tandis que le "8" gère le mode RGB.
C'est sur ce point que je ne comprends pas bien le fonctionnement du TFT.

Le bit D3 correspondant prend deux valeurs qui sont :
--> ‘0’ =RGB color filter panel, (sens normal)
--> ‘1’ =BGR color filter panel. (sens inversé)
La commande "MADCTL" met mon écran dans le mode "BGR". J'aurai préféré avoir "RGB".
Si j'ai bien compris cette commande, elle inverse le sens de lecture des couleurs, soit de droite à gauche ou de gauche à droite.

Dans mes programmes, j'ai défini la couleur suivant le type ci-après :
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
typedef struct {
	unsigned char	red;
	unsigned char	green;
	unsigned char	blue;
} T_COLOR;
Autrement dit, j'utilise les couleurs comme si j'étais en HTML, soit sur 24 bits.

J'utilise les couleurs suivantes :
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
const T_COLOR	_black    = {  0,  0,  0};
const T_COLOR	_blue     = {  0,  0,255};
const T_COLOR	_green    = {  0,255,  0};
const T_COLOR	_cyan     = {  0,255,255};
const T_COLOR	_red      = {255,  0,  0};
const T_COLOR	_magenta  = {255,  0,255};
const T_COLOR	_yellow   = {255,255,  0};
const T_COLOR	_white    = {255,255,255};
const T_COLOR	_orange   = {255,165,  0};
J'obtiens bien la couleur correspondante avec le mode "BGR".
Si je mets "RGB", les couleurs sont inversés.
C'est caractérisé par le rouge qui devient le bleu et vice-versa.

Si j'ai bien compris, la couleur s'écrit sur 18 bits de la façon suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| 0| 0| 0| 0| 0| 0|R5|R4|R3|R2|R1|R0|G5|G4|G3|G2|G1|G0|B5|B4|B3|B2|B1|B0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Avec "R" pour red, "G" pour Green et "B" pour blue.

A priori, j'envoie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|R7|R6|R5|R4|R3|R2|R1|R0|G7|G6|G5|G4|G3|G2|G1|G0|B7|B6|B5|B4|B3|B2|B1|B0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Je crois que le sens de lecture se fait de gauche à droite. Pourquoi ?
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
const SPISettings settings{8000000, MSBFIRST, SPI_MODE0};
Le SPISettings possède la valeur "MSBFIRST", donc les poids forts en premier.

Mes question sont :
--> pourquoi dois-je utiliser le "BGR" pour avoir le rouge ?
Ce n'est pas logique car je devrais être en "RGB" pour obtenir le rouge, non ?

--> Ou se trouve l'inversion, s'il s'agit de cela ?
Dans le paramétrage, à l'initialisation du TFT 1.8" ?
Ou dans le transfert de la couleur vers le TFT 1.8" ?

--> je préfère conserver mes couleurs dans la représentation RGB sur 24 bits.
Cela me parait plus naturel à l'usage.
Dois-je donc créer une fonctionner qui va inverser le sens de lecture de la couleur ?
J'envoie la couleur comme si je lisais de gauche à droite.
Ma fonction devrait s'employer à lire de droite à gauche.
Pour des questions de rapidité, je préfère ne pas avoir cette soltion.
Comment faire ?

Dans la bibliothèque Adafruit, c'est le mode "BGR" qui est utilisé.
Par contre, la couleur est codifiée sur 16 bits, soit sur deux octets.

Cordialement.
Artemus24.
@+