300 lines
8.1 KiB
C++
300 lines
8.1 KiB
C++
/*
|
|
Adapted from the Adafruit graphicstest sketch.
|
|
|
|
This sketch uses the GLCD font (font 1) only. Disable other fonts to make
|
|
the sketch fit in an UNO!
|
|
|
|
Make sure all the required fonts are loaded by editting the
|
|
User_Setup.h file in the TFT_eSPI library folder.
|
|
|
|
If using an UNO or Mega (ATmega328 or ATmega2560 processor) then for best
|
|
performance use the F_AS_T option found in the User_Setup.h file in the
|
|
TFT_eSPI library folder.
|
|
|
|
The library uses the hardware SPI pins only:
|
|
For UNO, Nano, Micro Pro ATmega328 based processors
|
|
MOSI = pin 11, SCK = pin 13
|
|
For Mega:
|
|
MOSI = pin 51, SCK = pin 52
|
|
|
|
The pins used for the TFT chip select (CS) and Data/command (DC) and Reset (RST)
|
|
signal lines to the TFT must also be defined in the library User_Setup.h file.
|
|
|
|
Sugested TFT connections for UNO and Atmega328 based boards
|
|
sclk 13 // Don't change, this is the hardware SPI SCLK line
|
|
mosi 11 // Don't change, this is the hardware SPI MOSI line
|
|
cs 10 // Chip select for TFT display
|
|
dc 9 // Data/command line
|
|
rst 7 // Reset, you could connect this to the Arduino reset pin
|
|
|
|
Suggested TFT connections for the MEGA and ATmega2560 based boards
|
|
sclk 52 // Don't change, this is the hardware SPI SCLK line
|
|
mosi 51 // Don't change, this is the hardware SPI MOSI line
|
|
cs 47 // TFT chip select line
|
|
dc 48 // TFT data/command line
|
|
rst 44 // you could alternatively connect this to the Arduino reset
|
|
|
|
#########################################################################
|
|
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
|
|
###### TO SELECT THE FONTS AND PINS YOU USE, SEE ABOVE ######
|
|
#########################################################################
|
|
*/
|
|
|
|
|
|
#include <TFT_eSPI.h> // Hardware-specific library
|
|
#include <SPI.h>
|
|
|
|
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
|
|
|
|
float p = 3.1415926;
|
|
|
|
void setup(void) {
|
|
Serial.begin(9600);
|
|
Serial.print("Hello! ST7735 TFT Test");
|
|
|
|
// Use this initializer if you're using a 1.8" TFT
|
|
tft.init(); // initialize a ST7735S chip
|
|
|
|
Serial.println("Initialized");
|
|
|
|
uint16_t time = millis();
|
|
tft.fillScreen(ST7735_BLACK);
|
|
time = millis() - time;
|
|
|
|
Serial.println(time, DEC);
|
|
delay(500);
|
|
|
|
// large block of text
|
|
tft.fillScreen(ST7735_BLACK);
|
|
testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
|
|
delay(1000);
|
|
|
|
// tft print function!
|
|
tftPrintTest();
|
|
delay(4000);
|
|
|
|
// a single pixel
|
|
tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
|
|
delay(500);
|
|
|
|
// line draw test
|
|
testlines(ST7735_YELLOW);
|
|
delay(500);
|
|
|
|
// optimized lines
|
|
testfastlines(ST7735_RED, ST7735_BLUE);
|
|
delay(500);
|
|
|
|
testdrawrects(ST7735_GREEN);
|
|
delay(500);
|
|
|
|
testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
|
|
delay(500);
|
|
|
|
tft.fillScreen(ST7735_BLACK);
|
|
testfillcircles(10, ST7735_BLUE);
|
|
testdrawcircles(10, ST7735_WHITE);
|
|
delay(500);
|
|
|
|
testroundrects();
|
|
delay(500);
|
|
|
|
testtriangles();
|
|
delay(500);
|
|
|
|
mediabuttons();
|
|
delay(500);
|
|
|
|
Serial.println("done");
|
|
delay(1000);
|
|
}
|
|
|
|
void loop() {
|
|
tft.invertDisplay(true);
|
|
delay(500);
|
|
tft.invertDisplay(false);
|
|
delay(500);
|
|
}
|
|
|
|
void testlines(uint16_t color) {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=0; x < tft.width(); x+=6) {
|
|
tft.drawLine(0, 0, x, tft.height()-1, color);
|
|
}
|
|
for (int16_t y=0; y < tft.height(); y+=6) {
|
|
tft.drawLine(0, 0, tft.width()-1, y, color);
|
|
}
|
|
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=0; x < tft.width(); x+=6) {
|
|
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
|
|
}
|
|
for (int16_t y=0; y < tft.height(); y+=6) {
|
|
tft.drawLine(tft.width()-1, 0, 0, y, color);
|
|
}
|
|
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=0; x < tft.width(); x+=6) {
|
|
tft.drawLine(0, tft.height()-1, x, 0, color);
|
|
}
|
|
for (int16_t y=0; y < tft.height(); y+=6) {
|
|
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
|
|
}
|
|
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=0; x < tft.width(); x+=6) {
|
|
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
|
|
}
|
|
for (int16_t y=0; y < tft.height(); y+=6) {
|
|
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
|
|
}
|
|
}
|
|
|
|
void testdrawtext(char *text, uint16_t color) {
|
|
tft.setCursor(0, 0);
|
|
tft.setTextColor(color);
|
|
tft.setTextWrap(true);
|
|
tft.print(text);
|
|
}
|
|
|
|
void testfastlines(uint16_t color1, uint16_t color2) {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t y=0; y < tft.height(); y+=5) {
|
|
tft.drawFastHLine(0, y, tft.width(), color1);
|
|
}
|
|
for (int16_t x=0; x < tft.width(); x+=5) {
|
|
tft.drawFastVLine(x, 0, tft.height(), color2);
|
|
}
|
|
}
|
|
|
|
void testdrawrects(uint16_t color) {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=0; x < tft.width(); x+=6) {
|
|
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
|
|
}
|
|
}
|
|
|
|
void testfillrects(uint16_t color1, uint16_t color2) {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
for (int16_t x=tft.width()-1; x > 6; x-=6) {
|
|
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
|
|
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
|
|
}
|
|
}
|
|
|
|
void testfillcircles(uint8_t radius, uint16_t color) {
|
|
for (int16_t x=radius; x < tft.width(); x+=radius*2) {
|
|
for (int16_t y=radius; y < tft.height(); y+=radius*2) {
|
|
tft.fillCircle(x, y, radius, color);
|
|
}
|
|
}
|
|
}
|
|
|
|
void testdrawcircles(uint8_t radius, uint16_t color) {
|
|
for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
|
|
for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
|
|
tft.drawCircle(x, y, radius, color);
|
|
}
|
|
}
|
|
}
|
|
|
|
void testtriangles() {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
int color = 0xF800;
|
|
int t;
|
|
int w = tft.width()/2;
|
|
int x = tft.height()-1;
|
|
int y = 0;
|
|
int z = tft.width();
|
|
for(t = 0 ; t <= 15; t+=1) {
|
|
tft.drawTriangle(w, y, y, x, z, x, color);
|
|
x-=4;
|
|
y+=4;
|
|
z-=4;
|
|
color+=100;
|
|
}
|
|
}
|
|
|
|
void testroundrects() {
|
|
tft.fillScreen(ST7735_BLACK);
|
|
int color = 100;
|
|
int i;
|
|
int t;
|
|
for(t = 0 ; t <= 4; t+=1) {
|
|
int x = 0;
|
|
int y = 0;
|
|
int w = tft.width()-2;
|
|
int h = tft.height()-2;
|
|
for(i = 0 ; i <= 16; i+=1) {
|
|
tft.drawRoundRect(x, y, w, h, 5, color);
|
|
x+=2;
|
|
y+=3;
|
|
w-=4;
|
|
h-=6;
|
|
color+=1100;
|
|
}
|
|
color+=100;
|
|
}
|
|
}
|
|
|
|
void tftPrintTest() {
|
|
tft.setTextWrap(false);
|
|
tft.fillScreen(ST7735_BLACK);
|
|
tft.setCursor(0, 30);
|
|
tft.setTextColor(ST7735_RED);
|
|
tft.setTextSize(1);
|
|
tft.println("Hello World!");
|
|
tft.setTextColor(ST7735_YELLOW);
|
|
tft.setTextSize(2);
|
|
tft.println("Hello World!");
|
|
tft.setTextColor(ST7735_GREEN);
|
|
tft.setTextSize(3);
|
|
tft.println("Hello World!");
|
|
tft.setTextColor(ST7735_BLUE);
|
|
tft.setTextSize(4);
|
|
tft.print(1234.567);
|
|
delay(1500);
|
|
tft.setCursor(0, 0);
|
|
tft.fillScreen(ST7735_BLACK);
|
|
tft.setTextColor(ST7735_WHITE);
|
|
tft.setTextSize(0);
|
|
tft.println("Hello World!");
|
|
tft.setTextSize(1);
|
|
tft.setTextColor(ST7735_GREEN);
|
|
tft.print(p, 6);
|
|
tft.println(" Want pi?");
|
|
tft.println(" ");
|
|
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
|
|
tft.println(" Print HEX!");
|
|
tft.println(" ");
|
|
tft.setTextColor(ST7735_WHITE);
|
|
tft.println("Sketch has been");
|
|
tft.println("running for: ");
|
|
tft.setTextColor(ST7735_MAGENTA);
|
|
tft.print(millis() / 1000);
|
|
tft.setTextColor(ST7735_WHITE);
|
|
tft.print(" seconds.");
|
|
}
|
|
|
|
void mediabuttons() {
|
|
// play
|
|
tft.fillScreen(ST7735_BLACK);
|
|
tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
|
|
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
|
|
delay(500);
|
|
// pause
|
|
tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
|
|
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
|
|
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
|
|
delay(500);
|
|
// play color
|
|
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
|
|
delay(50);
|
|
// pause color
|
|
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
|
|
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
|
|
// play color
|
|
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
|
|
}
|
|
|