133 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
 | 
						|
//   Diagnostic test for the displayed colour order
 | 
						|
//
 | 
						|
// Writen by Bodmer 17/2/19 for the TFT_eSPI library:
 | 
						|
// https://github.com/Bodmer/TFT_eSPI
 | 
						|
 | 
						|
/* 
 | 
						|
 Different hardware manufacturers use different colour order
 | 
						|
 configurations at the hardware level.  This may result in
 | 
						|
 incorrect colours being displayed.
 | 
						|
 | 
						|
 Incorrectly displayed colours could also be the result of
 | 
						|
 using the wrong display driver in the library setup file.
 | 
						|
 | 
						|
 Typically displays have a control register (MADCTL) that can
 | 
						|
 be used to set the Red Green Blue (RGB) colour order to RGB
 | 
						|
 or BRG so that red and blue are swapped on the display.
 | 
						|
 | 
						|
 This control register is also used to manage the display
 | 
						|
 rotation and coordinate mirroring. The control register
 | 
						|
 typically has 8 bits, for the ILI9341 these are:
 | 
						|
 | 
						|
 Bit Function
 | 
						|
 7   Mirror Y coordinate (row address order)
 | 
						|
 6   Mirror X coordinate (column address order)
 | 
						|
 5   Row/column exchange (for rotation)
 | 
						|
 4   Refresh direction (top to bottom or bottom to top in portrait orientation)
 | 
						|
 3   RGB order (swaps red and blue)
 | 
						|
 2   Refresh direction (top to bottom or bottom to top in landscape orientation)
 | 
						|
 1   Not used
 | 
						|
 0   Not used
 | 
						|
 | 
						|
 The control register bits can be written with this example command sequence:
 | 
						|
 
 | 
						|
    tft.writecommand(TFT_MADCTL);
 | 
						|
    tft.writedata(0x48);          // Bits 6 and 3 set
 | 
						|
    
 | 
						|
 0x48 is the default value for ILI9341 (0xA8 for ESP32 M5STACK)
 | 
						|
 in rotation 0 orientation.
 | 
						|
 
 | 
						|
 Another control register can be used to "invert" colours,
 | 
						|
 this swaps black and white as well as other colours (e.g.
 | 
						|
 green to magenta, red to cyan, blue to yellow).
 | 
						|
 
 | 
						|
 To invert colours insert this line after tft.init() or tft.begin():
 | 
						|
 | 
						|
    tft.invertDisplay( invert ); // Where invert is true or false
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
#include <SPI.h>
 | 
						|
 | 
						|
#include <TFT_eSPI.h>       // Hardware-specific library
 | 
						|
 | 
						|
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
 | 
						|
 | 
						|
void setup(void) {
 | 
						|
  tft.init();
 | 
						|
 | 
						|
  tft.fillScreen(TFT_BLACK);
 | 
						|
  
 | 
						|
  // Set "cursor" at top left corner of display (0,0) and select font 4
 | 
						|
  tft.setCursor(0, 0, 4);
 | 
						|
 | 
						|
  // Set the font colour to be white with a black background
 | 
						|
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
 | 
						|
 | 
						|
  // We can now plot text on screen using the "print" class
 | 
						|
  tft.println("Intialised default\n");
 | 
						|
  tft.println("White text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_RED, TFT_BLACK);
 | 
						|
  tft.println("Red text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_GREEN, TFT_BLACK);
 | 
						|
  tft.println("Green text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_BLUE, TFT_BLACK);
 | 
						|
  tft.println("Blue text");
 | 
						|
 | 
						|
  delay(5000);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void loop() {
 | 
						|
 | 
						|
  tft.invertDisplay( false ); // Where i is true or false
 | 
						|
 
 | 
						|
  tft.fillScreen(TFT_BLACK);
 | 
						|
  
 | 
						|
  tft.setCursor(0, 0, 4);
 | 
						|
 | 
						|
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
 | 
						|
  tft.println("Invert OFF\n");
 | 
						|
 | 
						|
  tft.println("White text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_RED, TFT_BLACK);
 | 
						|
  tft.println("Red text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_GREEN, TFT_BLACK);
 | 
						|
  tft.println("Green text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_BLUE, TFT_BLACK);
 | 
						|
  tft.println("Blue text");
 | 
						|
 | 
						|
  delay(5000);
 | 
						|
 | 
						|
 | 
						|
  // Binary inversion of colours
 | 
						|
  tft.invertDisplay( true ); // Where i is true or false
 | 
						|
 
 | 
						|
  tft.fillScreen(TFT_BLACK);
 | 
						|
  
 | 
						|
  tft.setCursor(0, 0, 4);
 | 
						|
 | 
						|
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
 | 
						|
  tft.println("Invert ON\n");
 | 
						|
 | 
						|
  tft.println("White text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_RED, TFT_BLACK);
 | 
						|
  tft.println("Red text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_GREEN, TFT_BLACK);
 | 
						|
  tft.println("Green text");
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_BLUE, TFT_BLACK);
 | 
						|
  tft.println("Blue text");
 | 
						|
 | 
						|
  delay(5000);
 | 
						|
}
 |