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);
 | |
| }
 | |
| 
 |