acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
Sprite_TFT_Rainbow.ino (3986B)
1 /* 2 An example showing rainbow colours on a 160x128 TFT LCD screen 3 and to show a basic example of font use. 4 5 This example plots the text in a sprite then pushes the sprite to the 6 TFT screen. 7 8 Make sure all the display driver and pin connections are correct by 9 editing the User_Setup.h file in the TFT_eSPI library folder. 10 11 Note that yield() or delay(0) must be called in long duration for/while 12 loops to stop the ESP8266 watchdog triggering. 13 14 ######################################################################### 15 ###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ###### 16 ######################################################################### 17 */ 18 19 #define IWIDTH 160 20 #define IHEIGHT 128 21 22 #include <TFT_eSPI.h> // Graphics and font library 23 #include <SPI.h> 24 25 TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h 26 27 TFT_eSprite img = TFT_eSprite(&tft); 28 29 unsigned long targetTime = 0; 30 byte red = 31; 31 byte green = 0; 32 byte blue = 0; 33 byte state = 0; 34 unsigned int colour = red << 11; 35 36 void setup(void) { 37 tft.init(); 38 tft.setRotation(1); 39 tft.fillScreen(TFT_BLACK); 40 41 img.createSprite(IWIDTH, IHEIGHT); 42 img.fillSprite(TFT_BLACK); 43 44 targetTime = millis() + 1000; 45 } 46 47 void loop() { 48 49 if (targetTime < millis()) { 50 targetTime = millis() + 100;//10000; 51 52 // Colour changing state machine 53 for (int i = 0; i < 160; i++) { 54 img.drawFastVLine(i, 0, img.height(), colour); 55 switch (state) { 56 case 0: 57 green += 2; 58 if (green == 64) { 59 green = 63; 60 state = 1; 61 } 62 break; 63 case 1: 64 red--; 65 if (red == 255) { 66 red = 0; 67 state = 2; 68 } 69 break; 70 case 2: 71 blue ++; 72 if (blue == 32) { 73 blue = 31; 74 state = 3; 75 } 76 break; 77 case 3: 78 green -= 2; 79 if (green == 255) { 80 green = 0; 81 state = 4; 82 } 83 break; 84 case 4: 85 red ++; 86 if (red == 32) { 87 red = 31; 88 state = 5; 89 } 90 break; 91 case 5: 92 blue --; 93 if (blue == 255) { 94 blue = 0; 95 state = 0; 96 } 97 break; 98 } 99 colour = red << 11 | green << 5 | blue; 100 } 101 102 // The standard ADAFruit font still works as before 103 img.setTextColor(TFT_BLACK); 104 img.setCursor (12, 5); 105 img.print("Original ADAfruit font!"); 106 107 // The new larger fonts do not use the .setCursor call, coords are embedded 108 img.setTextColor(TFT_BLACK, TFT_BLACK); // Do not plot the background colour 109 110 // Overlay the black text on top of the rainbow plot (the advantage of not drawing the background colour!) 111 img.drawCentreString("Font size 2", 80, 14, 2); // Draw text centre at position 80, 12 using font 2 112 113 //img.drawCentreString("Font size 2",81,12,2); // Draw text centre at position 80, 12 using font 2 114 115 img.drawCentreString("Font size 4", 80, 30, 4); // Draw text centre at position 80, 24 using font 4 116 117 img.drawCentreString("12.34", 80, 54, 6); // Draw text centre at position 80, 24 using font 6 118 119 img.drawCentreString("12.34 is in font size 6", 80, 92, 2); // Draw text centre at position 80, 90 using font 2 120 121 // Note the x position is the top left of the font! 122 123 // draw a floating point number 124 float pi = 3.14159; // Value to print 125 int precision = 3; // Number of digits after decimal point 126 int xpos = 50; // x position 127 int ypos = 110; // y position 128 int font = 2; // font number only 2,4,6,7 valid. Font 6 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 0 : a p m 129 xpos += img.drawFloat(pi, precision, xpos, ypos, font); // Draw rounded number and return new xpos delta for next print position 130 img.drawString(" is pi", xpos, ypos, font); // Continue printing from new x position 131 132 img.pushSprite(0, 0); 133 } 134 } 135 136 137 138 139 140