327 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
	
// Demo based on:
 | 
						|
// UTFT_Demo by Henning Karlsen
 | 
						|
// web: http://www.henningkarlsen.com/electronics
 | 
						|
/*
 | 
						|
 | 
						|
 The delay between tests is set to 0. The tests run so fast you will need to
 | 
						|
 change the WAIT value below to see what is being plotted!
 | 
						|
 
 | 
						|
 This sketch uses the GLCD and font 2 only.
 | 
						|
 | 
						|
 Make sure all the required fonts are loaded by editting the
 | 
						|
 User_Setup.h file in the TFT_eSPI library folder.
 | 
						|
 | 
						|
  #########################################################################
 | 
						|
  ###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
 | 
						|
  ######            TO SELECT THE FONTS YOU USE, SEE ABOVE           ######
 | 
						|
  #########################################################################
 | 
						|
 */
 | 
						|
 | 
						|
// Delay between demo pages
 | 
						|
#define WAIT 0 // Delay between tests, set to 0 to demo speed, 2000 to see what it does!
 | 
						|
 | 
						|
#define CENTRE 240
 | 
						|
 | 
						|
#include <TFT_eSPI.h> // Hardware-specific library
 | 
						|
#include <SPI.h>
 | 
						|
 | 
						|
TFT_eSPI tft = TFT_eSPI();                   // Invoke custom library with default width and height
 | 
						|
 | 
						|
#define TFT_GREY 0x7BEF
 | 
						|
 | 
						|
uint32_t runTime = 0;
 | 
						|
 | 
						|
void setup()
 | 
						|
{
 | 
						|
  randomSeed(analogRead(0));
 | 
						|
  Serial.begin(38400);
 | 
						|
// Setup the LCD
 | 
						|
  tft.init();
 | 
						|
  tft.setRotation(1);
 | 
						|
}
 | 
						|
 | 
						|
void loop()
 | 
						|
{
 | 
						|
  int buf[478];
 | 
						|
  int x, x2;
 | 
						|
  int y, y2;
 | 
						|
  int r;
 | 
						|
 | 
						|
  runTime = millis();
 | 
						|
// Clear the screen and draw the frame
 | 
						|
  tft.fillScreen(TFT_BLACK);
 | 
						|
 | 
						|
  tft.fillRect(0, 0, 480, 13, TFT_RED);
 | 
						|
 | 
						|
  tft.fillRect(0, 305, 480, 320, TFT_GREY);
 | 
						|
  tft.setTextColor(TFT_BLACK,TFT_RED);
 | 
						|
 | 
						|
  tft.drawCentreString("* TFT_eSPI *", CENTRE, 3, 1);
 | 
						|
  tft.setTextColor(TFT_YELLOW,TFT_GREY);
 | 
						|
  tft.drawCentreString("Adapted by Bodmer", CENTRE, 309,1);
 | 
						|
 | 
						|
  tft.drawRect(0, 14, 479, 305-14, TFT_BLUE);
 | 
						|
 | 
						|
// Draw crosshairs
 | 
						|
  tft.drawLine(239, 15, 239, 304, TFT_BLUE);
 | 
						|
  tft.drawLine(1, 159, 478, 159, TFT_BLUE);
 | 
						|
  for (int i=9; i<470; i+=10)
 | 
						|
    tft.drawLine(i, 157, i, 161, TFT_BLUE);
 | 
						|
  for (int i=19; i<220; i+=10)
 | 
						|
    tft.drawLine(237, i, 241, i, TFT_BLUE);
 | 
						|
 | 
						|
// Draw sin-, cos- and tan-lines  
 | 
						|
  tft.setTextColor(TFT_CYAN);
 | 
						|
  tft.drawString("Sin", 5, 15,2);
 | 
						|
  for (int i=1; i<478; i++)
 | 
						|
  {
 | 
						|
    tft.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95),TFT_CYAN);
 | 
						|
  }
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_RED);
 | 
						|
  tft.drawString("Cos", 5, 30,2);
 | 
						|
  for (int i=1; i<478; i++)
 | 
						|
  {
 | 
						|
    tft.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95),TFT_RED);
 | 
						|
  }
 | 
						|
 | 
						|
  tft.setTextColor(TFT_YELLOW);
 | 
						|
  tft.drawString("Tan", 5, 45,2);
 | 
						|
  for (int i=1; i<478; i++)
 | 
						|
  {
 | 
						|
    tft.drawPixel(i,159+(tan(((i*1.13)*3.14)/180)),TFT_YELLOW);
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
  tft.drawLine(239, 15, 239, 304,TFT_BLUE);
 | 
						|
  tft.drawLine(1, 159, 478, 159,TFT_BLUE);
 | 
						|
 | 
						|
// Draw a moving sinewave
 | 
						|
int col = 0;
 | 
						|
  x=1;
 | 
						|
  for (int i=1; i<(477*15); i++) 
 | 
						|
  {
 | 
						|
    x++;
 | 
						|
    if (x==478)
 | 
						|
      x=1;
 | 
						|
    if (i>478)
 | 
						|
    {
 | 
						|
      if ((x==239)||(buf[x-1]==159))
 | 
						|
        col = TFT_BLUE;
 | 
						|
      else
 | 
						|
        tft.drawPixel(x,buf[x-1],TFT_BLACK);
 | 
						|
    }
 | 
						|
    y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100)));
 | 
						|
    tft.drawPixel(x,y, TFT_BLUE);
 | 
						|
    buf[x-1]=y;
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some filled rectangles
 | 
						|
  for (int i=1; i<6; i++)
 | 
						|
  {
 | 
						|
    switch (i)
 | 
						|
    {
 | 
						|
      case 1:
 | 
						|
        col = TFT_MAGENTA;
 | 
						|
        break;
 | 
						|
      case 2:
 | 
						|
        col = TFT_RED;
 | 
						|
        break;
 | 
						|
      case 3:
 | 
						|
        col = TFT_GREEN;
 | 
						|
        break;
 | 
						|
      case 4:
 | 
						|
        col = TFT_BLUE;
 | 
						|
        break;
 | 
						|
      case 5:
 | 
						|
        col = TFT_YELLOW;
 | 
						|
        break;
 | 
						|
    }
 | 
						|
    tft.fillRect(150+(i*20), 70+(i*20), 60, 60,col);
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some filled, rounded rectangles
 | 
						|
  for (int i=1; i<6; i++)
 | 
						|
  {
 | 
						|
    switch (i)
 | 
						|
    {
 | 
						|
      case 1:
 | 
						|
        col = TFT_MAGENTA;
 | 
						|
        break;
 | 
						|
      case 2:
 | 
						|
        col = TFT_RED;
 | 
						|
        break;
 | 
						|
      case 3:
 | 
						|
        col = TFT_GREEN;
 | 
						|
        break;
 | 
						|
      case 4:
 | 
						|
        col = TFT_BLUE;
 | 
						|
        break;
 | 
						|
      case 5:
 | 
						|
        col = TFT_YELLOW;
 | 
						|
        break;
 | 
						|
    }
 | 
						|
    tft.fillRoundRect(270-(i*20), 70+(i*20), 60, 60, 3, col);
 | 
						|
  }
 | 
						|
  
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some filled circles
 | 
						|
  for (int i=1; i<6; i++)
 | 
						|
  {
 | 
						|
    switch (i)
 | 
						|
    {
 | 
						|
      case 1:
 | 
						|
        col = TFT_MAGENTA;
 | 
						|
        break;
 | 
						|
      case 2:
 | 
						|
        col = TFT_RED;
 | 
						|
        break;
 | 
						|
      case 3:
 | 
						|
        col = TFT_GREEN;
 | 
						|
        break;
 | 
						|
      case 4:
 | 
						|
        col = TFT_BLUE;
 | 
						|
        break;
 | 
						|
      case 5:
 | 
						|
        col = TFT_YELLOW;
 | 
						|
        break;
 | 
						|
    }
 | 
						|
    tft.fillCircle(180+(i*20),100+(i*20), 30,col);
 | 
						|
  }
 | 
						|
  
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some lines in a pattern
 | 
						|
 | 
						|
  for (int i=15; i<304; i+=5)
 | 
						|
  {
 | 
						|
    tft.drawLine(1, i, (i*1.6)-10, 303, TFT_RED);
 | 
						|
  }
 | 
						|
 | 
						|
  for (int i=304; i>15; i-=5)
 | 
						|
  {
 | 
						|
    tft.drawLine(477, i, (i*1.6)-11, 15, TFT_RED);
 | 
						|
  }
 | 
						|
 | 
						|
  for (int i=304; i>15; i-=5)
 | 
						|
  {
 | 
						|
    tft.drawLine(1, i, 491-(i*1.6), 15, TFT_CYAN);
 | 
						|
  }
 | 
						|
 | 
						|
  for (int i=15; i<304; i+=5)
 | 
						|
  {
 | 
						|
    tft.drawLine(477, i, 490-(i*1.6), 303, TFT_CYAN);
 | 
						|
  }
 | 
						|
  
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some random circles
 | 
						|
  for (int i=0; i<100; i++)
 | 
						|
  {
 | 
						|
    x=32+random(416);
 | 
						|
    y=45+random(226);
 | 
						|
    r=random(30);
 | 
						|
    tft.drawCircle(x, y, r,random(0xFFFF));
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some random rectangles
 | 
						|
  for (int i=0; i<100; i++)
 | 
						|
  {
 | 
						|
    x=2+random(476);
 | 
						|
    y=16+random(289);
 | 
						|
    x2=2+random(476);
 | 
						|
    y2=16+random(289);
 | 
						|
    if (x2<x) {
 | 
						|
      r=x;x=x2;x2=r;
 | 
						|
    }
 | 
						|
    if (y2<y) {
 | 
						|
      r=y;y=y2;y2=r;
 | 
						|
    }
 | 
						|
    tft.drawRect(x, y, x2-x, y2-y,random(0xFFFF));
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
// Draw some random rounded rectangles
 | 
						|
  for (int i=0; i<100; i++)
 | 
						|
  {
 | 
						|
    x=2+random(476);
 | 
						|
    y=16+random(289);
 | 
						|
    x2=2+random(476);
 | 
						|
    y2=16+random(289);
 | 
						|
    if (x2<x) {
 | 
						|
      r=x;x=x2;x2=r;
 | 
						|
    }
 | 
						|
    if (y2<y) {
 | 
						|
      r=y;y=y2;y2=r;
 | 
						|
    }
 | 
						|
    tft.drawRoundRect(x, y, x2-x, y2-y, 3,random(0xFFFF));
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
  for (int i=0; i<100; i++)
 | 
						|
  {
 | 
						|
    x=2+random(476);
 | 
						|
    y=16+random(289);
 | 
						|
    x2=2+random(476);
 | 
						|
    y2=16+random(289);
 | 
						|
    col=random(0xFFFF);
 | 
						|
    tft.drawLine(x, y, x2, y2,col);
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
  
 | 
						|
  tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
 | 
						|
 | 
						|
  for (int i=0; i<10000; i++)
 | 
						|
  {
 | 
						|
    tft.drawPixel(2+random(476), 16+random(289),random(0xFFFF));
 | 
						|
  }
 | 
						|
 | 
						|
  delay(WAIT);
 | 
						|
 | 
						|
  tft.fillRect(0, 0, 480, 320, TFT_BLUE);
 | 
						|
 | 
						|
  tft.fillRoundRect(160, 70, 319-160, 169-70, 3,TFT_RED);
 | 
						|
  
 | 
						|
  tft.setTextColor(TFT_WHITE,TFT_RED);
 | 
						|
  tft.drawCentreString("That's it!", CENTRE, 93,2);
 | 
						|
  tft.drawCentreString("Restarting in a", CENTRE, 119, 2);
 | 
						|
  tft.drawCentreString("few seconds...", CENTRE, 132, 2);
 | 
						|
 | 
						|
  tft.setTextColor(TFT_GREEN,TFT_BLUE);
 | 
						|
  tft.drawCentreString("Runtime: (msecs)", CENTRE, 280, 2);
 | 
						|
  tft.setTextDatum(TC_DATUM);
 | 
						|
  runTime = millis()-runTime;
 | 
						|
  tft.drawNumber(runTime, CENTRE, 300,2);
 | 
						|
  tft.setTextDatum(TL_DATUM);
 | 
						|
  delay (10000);
 | 
						|
}
 | 
						|
 |