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 |
Free_Font_Demo.ino (9327B)
1 /* 2 This example draws fonts (as used by the Adafruit_GFX library) onto the 3 screen. These fonts are called the GFX Free Fonts (GFXFF) in this library. 4 5 Other True Type fonts could be converted using the utility within the 6 "fontconvert" folder inside the library. This converted has also been 7 copied from the Adafruit_GFX library. 8 9 Since these fonts are a recent addition Adafruit do not have a tutorial 10 available yet on how to use the utility. Linux users will no doubt 11 figure it out! In the meantime there are 48 font files to use in sizes 12 from 9 point to 24 point, and in normal, bold, and italic or oblique 13 styles. 14 15 This example sketch uses both the print class and drawString() functions 16 to plot text to the screen. 17 18 Make sure LOAD_GFXFF is defined in the User_Setup.h file within the 19 TFT_eSPI library folder. 20 21 ######################################################################### 22 ###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ###### 23 ######################################################################### 24 */ 25 26 #include <TFT_eSPI.h> // Hardware-specific library 27 #include <SPI.h> 28 29 #include "Free_Fonts.h" // Include the header file attached to this sketch 30 31 TFT_eSPI tft = TFT_eSPI(); // Invoke custom library with default width and height 32 33 unsigned long drawTime = 0; 34 35 void setup(void) { 36 37 tft.begin(); 38 39 tft.setRotation(1); 40 41 } 42 43 void loop() { 44 45 int xpos = 0; 46 int ypos = 40; 47 48 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 49 // Select different fonts to draw on screen using the print class 50 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 51 52 tft.fillScreen(TFT_NAVY); // Clear screen to navy background 53 54 header("Draw free fonts using print class"); 55 56 // For comaptibility with Adafruit_GFX library the text background is not plotted when using the print class 57 // even if we specify it. 58 tft.setTextColor(TFT_YELLOW, TFT_BLACK); 59 tft.setCursor(xpos, ypos); // Set cursor near top left corner of screen 60 61 tft.setTextFont(GLCD); // Select the orginal small GLCD font by using NULL or GLCD 62 tft.println(); // Move cursor down a line 63 tft.print("Original GLCD font"); // Print the font name onto the TFT screen 64 tft.println(); 65 tft.println(); 66 67 tft.setFreeFont(FSB9); // Select Free Serif 9 point font, could use: 68 // tft.setFreeFont(&FreeSerif9pt7b); 69 tft.println(); // Free fonts plot with the baseline (imaginary line the letter A would sit on) 70 // as the datum, so we must move the cursor down a line from the 0,0 position 71 tft.print("Serif Bold 9pt"); // Print the font name onto the TFT screen 72 73 tft.setFreeFont(FSB12); // Select Free Serif 12 point font 74 tft.println(); // Move cursor down a line 75 tft.print("Serif Bold 12pt"); // Print the font name onto the TFT screen 76 77 tft.setFreeFont(FSB18); // Select Free Serif 12 point font 78 tft.println(); // Move cursor down a line 79 tft.print("Serif Bold 18pt"); // Print the font name onto the TFT screen 80 81 tft.setFreeFont(FSB24); // Select Free Serif 24 point font 82 tft.println(); // Move cursor down a line 83 tft.print("Serif Bold 24pt"); // Print the font name onto the TFT screen 84 85 86 delay(4000); 87 88 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 89 // Now use drawString() so we can set background colours and the datum 90 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 91 92 tft.fillScreen(TFT_BLACK); 93 94 header("Draw with background using drawString()"); 95 96 tft.setTextColor(TFT_WHITE, TFT_BLACK); 97 98 tft.setTextDatum(TC_DATUM); // Centre text on x,y position 99 100 xpos = tft.width() / 2; // Half the screen width 101 ypos = 50; 102 103 tft.setFreeFont(FSB9); // Select the font 104 tft.drawString("Serif Bold 9pt", xpos, ypos, GFXFF); // Draw the text string in the selected GFX free font 105 ypos += tft.fontHeight(GFXFF); // Get the font height and move ypos down 106 107 tft.setFreeFont(FSB12); 108 tft.drawString("Serif Bold 12pt", xpos, ypos, GFXFF); 109 ypos += tft.fontHeight(GFXFF); 110 111 tft.setFreeFont(FSB18); 112 tft.drawString("Serif Bold 18pt", xpos, ypos, GFXFF); 113 ypos += tft.fontHeight(GFXFF); 114 115 tft.setFreeFont(FSB24); 116 tft.drawString("Serif Bold 24pt", xpos, ypos, GFXFF); 117 ypos += tft.fontHeight(GFXFF); 118 119 // Set text padding to 120 pixels wide area to over-write old values on screen 120 tft.setTextPadding(120); 121 for (int i = 0; i <= 20; i++) { 122 tft.drawFloat(i / 10.0, 1, xpos, ypos, GFXFF); 123 delay (200); 124 } 125 126 delay(4000); 127 128 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 129 // Same again but with colours that show bounding boxes 130 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 131 132 133 tft.fillScreen(TFT_DARKGREY); 134 135 header("Show background filled bounding boxes"); 136 137 tft.setTextColor(TFT_YELLOW, TFT_BLACK); 138 139 tft.setTextDatum(TC_DATUM); // Centre text on x,y position 140 141 xpos = tft.width() / 2; // Half the screen width 142 ypos = 50; 143 144 tft.setFreeFont(FSB9); // Select the font 145 tft.drawString("Serif Bold 9pt", xpos, ypos, GFXFF); // Draw the text string in the selected GFX free font 146 ypos += tft.fontHeight(GFXFF); // Get the font height and move ypos down 147 148 tft.setFreeFont(FSB12); 149 tft.drawString("Serif Bold 12pt", xpos, ypos, GFXFF); 150 ypos += tft.fontHeight(GFXFF); 151 152 tft.setFreeFont(FSB18); 153 tft.drawString("Serif Bold 18pt", xpos, ypos, GFXFF); 154 ypos += tft.fontHeight(GFXFF); 155 156 tft.setFreeFont(FSBI24); 157 tft.drawString("Serif Bold Italic 24pt", xpos, ypos, GFXFF); 158 ypos += tft.fontHeight(GFXFF); 159 160 // Set text padding to 120 pixels wide area to over-write old values on screen 161 tft.setTextPadding(120); 162 for (int i = 0; i <= 20; i++) { 163 tft.drawFloat(i / 10.0, 1, xpos, ypos, GFXFF); 164 delay (200); 165 } 166 167 delay(4000); 168 169 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 170 // Now show setting the 12 datum positions works with free fonts 171 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 172 173 // Numbers, floats and strings can be drawn relative to a datum 174 tft.fillScreen(TFT_BLACK); 175 header("Draw text relative to a datum"); 176 177 tft.setTextColor(TFT_DARKGREY, TFT_BLACK); 178 tft.setFreeFont(FSS9); 179 180 tft.setTextDatum(TL_DATUM); 181 tft.drawString("[Top left}", 20, 60, GFXFF); 182 drawDatum(20,60); 183 184 tft.setTextDatum(TC_DATUM); 185 tft.drawString("[Top centre]", 240, 60, GFXFF); 186 drawDatum(240,60); 187 188 tft.setTextDatum(TR_DATUM); 189 tft.drawString("[Top right]", 460, 60, GFXFF); 190 drawDatum(460,60); 191 192 tft.setTextDatum(ML_DATUM); 193 tft.drawString("[Middle left]", 20, 140, GFXFF); 194 drawDatum(20,140); 195 196 tft.setTextDatum(MC_DATUM); 197 tft.drawString("[Middle centre]", 240, 140, GFXFF); 198 drawDatum(240,140); 199 200 tft.setTextDatum(MR_DATUM); 201 tft.drawString("[Middle right]", 460, 140, GFXFF); 202 drawDatum(460,140); 203 204 tft.setTextDatum(BL_DATUM); 205 tft.drawString("[Bottom Left]", 20, 220, GFXFF); 206 drawDatum(20,220); 207 208 tft.setTextDatum(BC_DATUM); 209 tft.drawString("[Bottom centre]", 240, 220, GFXFF); 210 drawDatum(240,220); 211 212 tft.setTextDatum(BR_DATUM); 213 tft.drawString("[Bottom right]", 460, 220, GFXFF); 214 drawDatum(460,220); 215 216 tft.setTextDatum(L_BASELINE); 217 tft.drawString("[Left baseline]", 20, 300, GFXFF); 218 drawDatum(20,300); 219 220 tft.setTextDatum(C_BASELINE); 221 tft.drawString("[Centre baseline]", 240, 300, GFXFF); 222 drawDatum(240,300); 223 224 tft.setTextDatum(R_BASELINE); 225 tft.drawString("[Right baseline]", 460, 300, GFXFF); 226 drawDatum(460,300); 227 228 //while(1); 229 delay(8000); 230 231 } 232 233 // Print the header for a display screen 234 void header(const char *string) 235 { 236 tft.setTextSize(1); 237 tft.setTextColor(TFT_MAGENTA, TFT_BLUE); 238 tft.fillRect(0, 0, 480, 30, TFT_BLUE); 239 tft.setTextDatum(TC_DATUM); 240 tft.drawString(string, 239, 2, 4); // Font 4 for fast drawing with background 241 } 242 243 // Draw a + mark centred on x,y 244 void drawDatum(int x, int y) 245 { 246 tft.drawLine(x - 5, y, x + 5, y, TFT_GREEN); 247 tft.drawLine(x, y - 5, x, y + 5, TFT_GREEN); 248 } 249 250 251 // There follows a crude way of flagging that this example sketch needs fonts which 252 // have not been enbabled in the User_Setup.h file inside the TFT_HX8357 library. 253 // 254 // These lines produce errors during compile time if settings in User_Setup are not correct 255 // 256 // The error will be "does not name a type" but ignore this and read the text between '' 257 // it will indicate which font or feature needs to be enabled 258 // 259 // Either delete all the following lines if you do not want warnings, or change the lines 260 // to suit your sketch modifications. 261 262 #ifndef LOAD_GLCD 263 //ERROR_Please_enable_LOAD_GLCD_in_User_Setup 264 #endif 265 266 #ifndef LOAD_FONT2 267 //ERROR_Please_enable_LOAD_FONT2_in_User_Setup! 268 #endif 269 270 #ifndef LOAD_FONT4 271 //ERROR_Please_enable_LOAD_FONT4_in_User_Setup! 272 #endif 273 274 #ifndef LOAD_FONT6 275 //ERROR_Please_enable_LOAD_FONT6_in_User_Setup! 276 #endif 277 278 #ifndef LOAD_FONT7 279 //ERROR_Please_enable_LOAD_FONT7_in_User_Setup! 280 #endif 281 282 #ifndef LOAD_FONT8 283 //ERROR_Please_enable_LOAD_FONT8_in_User_Setup! 284 #endif 285 286 #ifndef LOAD_GFXFF 287 ERROR_Please_enable_LOAD_GFXFF_in_User_Setup! 288 #endif 289