Created
November 16, 2021 11:07
-
-
Save tidalvirus/c3306b8a0e29a6ceced38d828583b63a to your computer and use it in GitHub Desktop.
FTOLED functions in TFT_eSPI for freetronics OLED 128x128 SSD1351
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Diagnostic test for the displayed colour order | |
// | |
// Written 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 | |
/* Following blob taken from FTOLED and modified for TFT_eSPI.h */ | |
byte gpio_status = 0; | |
byte OLED_LOW = 2; | |
byte OLED_HIGH = 3; | |
void setGPIO0(byte gpio0) | |
{ | |
gpio_status = (gpio_status & ~0x03) | (uint8_t)gpio0; | |
tft.writecommand(0xB5); | |
tft.writedata(gpio_status); | |
} | |
void setDisplayOn(bool on) | |
{ | |
// GPIO0 drives OLED_VCC, driving it high turns on the boost converter | |
// module, driving it low turns it off. | |
if(on) { | |
setGPIO0(OLED_HIGH); | |
delay(100); | |
} | |
tft.writecommand(on ? 0xAF : 0xAE); | |
if(!on) { | |
setGPIO0(OLED_LOW); | |
delay(100); | |
} | |
} | |
/* end of FTOLED stuff */ | |
void setup(void) { | |
tft.init(); | |
setDisplayOn(true); | |
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("Initialised default\n"); | |
tft.println("White text"); | |
tft.setTextColor(TFT_RED, TFT_RED); | |
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); | |
setDisplayOn(false); | |
delay(1000); | |
setDisplayOn(true); | |
} | |
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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment