321 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			321 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|   This example draws fonts (as used by the Adafruit_GFX library) onto the
 | |
|   screen. These fonts are called the GFX Free Fonts (GFXFF) in this library.
 | |
| 
 | |
|   Other True Type fonts could be converted using the utility within the
 | |
|   "fontconvert" folder inside the library. This converted has also been
 | |
|   copied from the Adafruit_GFX library.
 | |
| 
 | |
|   Since these fonts are a recent addition Adafruit do not have a tutorial
 | |
|   available yet on how to use the utility.   Linux users will no doubt
 | |
|   figure it out!  In the meantime there are 48 font files to use in sizes
 | |
|   from 9 point to 24 point, and in normal, bold, and italic or oblique
 | |
|   styles.
 | |
| 
 | |
|   This example sketch uses both the print class and drawString() functions
 | |
|   to plot text to the screen.
 | |
| 
 | |
|   Make sure LOAD_GFXFF is defined in the User_Setup.h file within the
 | |
|   TFT_eSPI library folder.
 | |
| 
 | |
|   --------------------------- NOTE ----------------------------------------
 | |
|   The free font encoding format does not lend itself easily to plotting
 | |
|   the background without flicker. For values that changes on screen it is
 | |
|   better to use Fonts 1- 8 which are encoded specifically for rapid
 | |
|   drawing with background.
 | |
|   -------------------------------------------------------------------------
 | |
|   
 | |
|   >>>>>>>>>>>>>>>>>>>>>>>>>>> WARNING <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 | |
| 
 | |
|   As supplied with the default settings the sketch has 11 fonts loaded,
 | |
|   i.e. GLCD (Font 1), Font 2, Font 4, Font 6, Font 7, Font 8 and five Free Fonts,
 | |
|   even though they are not all used in the sketch.
 | |
|   
 | |
|   Disable fonts you do not need in User_Setup.h in the library folder.
 | |
| 
 | |
|   #########################################################################
 | |
|   ###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
 | |
|   #########################################################################
 | |
| */
 | |
| 
 | |
| #include "Free_Fonts.h" // Include the header file attached to this sketch
 | |
| 
 | |
| #include "SPI.h"
 | |
| #include "TFT_eSPI.h"
 | |
| 
 | |
| // Use hardware SPI
 | |
| TFT_eSPI tft = TFT_eSPI();
 | |
| 
 | |
| unsigned long drawTime = 0;
 | |
| 
 | |
| void setup(void) {
 | |
| 
 | |
|   tft.begin();
 | |
| 
 | |
|   tft.setRotation(1);
 | |
| 
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
| 
 | |
|   int xpos =  0;
 | |
|   int ypos = 40;
 | |
| 
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
|   // Select different fonts to draw on screen using the print class
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
| 
 | |
|   header("Using print() method", TFT_NAVY);
 | |
| 
 | |
|   // For comaptibility with Adafruit_GFX library the text background is not plotted when using the print class
 | |
|   // even if we specify it.
 | |
|   tft.setTextColor(TFT_YELLOW);
 | |
|   tft.setCursor(xpos, ypos);    // Set cursor near top left corner of screen
 | |
| 
 | |
|   tft.setFreeFont(TT1);     // Select the orginal small TomThumb font
 | |
|   tft.println();             // Move cursor down a line
 | |
|   tft.print("The really tiny TomThumb font");    // Print the font name onto the TFT screen
 | |
|   tft.println();
 | |
|   tft.println();
 | |
| 
 | |
|   tft.setFreeFont(FSB9);   // Select Free Serif 9 point font, could use:
 | |
|   // tft.setFreeFont(&FreeSerif9pt7b);
 | |
|   tft.println();          // Free fonts plot with the baseline (imaginary line the letter A would sit on)
 | |
|   // as the datum, so we must move the cursor down a line from the 0,0 position
 | |
|   tft.print("Serif Bold 9pt");  // Print the font name onto the TFT screen
 | |
| 
 | |
|   tft.setFreeFont(FSB12);       // Select Free Serif 12 point font
 | |
|   tft.println();                // Move cursor down a line
 | |
|   tft.print("Serif Bold 12pt"); // Print the font name onto the TFT screen
 | |
| 
 | |
|   tft.setFreeFont(FSB18);       // Select Free Serif 12 point font
 | |
|   tft.println();                // Move cursor down a line
 | |
|   tft.print("Serif Bold 18pt"); // Print the font name onto the TFT screen
 | |
| 
 | |
|   tft.setFreeFont(FSB24);       // Select Free Serif 24 point font
 | |
|   tft.println();                // Move cursor down a line
 | |
|   tft.print("Serif Bold 24pt"); // Print the font name onto the TFT screen
 | |
| 
 | |
| 
 | |
|   delay(4000);
 | |
| 
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
|   // Now use drawString() so we can set font background colours and the datum
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
| 
 | |
|   header("Using drawString()", TFT_BLACK);
 | |
| 
 | |
|   tft.setTextColor(TFT_WHITE, TFT_BLACK);
 | |
| 
 | |
|   tft.setTextDatum(TC_DATUM); // Centre text on x,y position
 | |
| 
 | |
|   xpos = tft.width() / 2; // Half the screen width
 | |
|   ypos = 50;
 | |
| 
 | |
|   tft.setFreeFont(FSB9);                              // Select the font
 | |
|   tft.drawString("Serif Bold 9pt", xpos, ypos, GFXFF);  // Draw the text string in the selected GFX free font
 | |
|   ypos += tft.fontHeight(GFXFF);                      // Get the font height and move ypos down
 | |
| 
 | |
|   tft.setFreeFont(FSB12);
 | |
|   tft.drawString("Serif Bold 12pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   tft.setFreeFont(FSB18);
 | |
|   tft.drawString("Serif Bold 18pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   tft.setFreeFont(FSB24);
 | |
|   tft.drawString("Serif Bold 24pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   // Set text padding to 100 pixels wide area to over-write old values on screen
 | |
|   tft.setTextPadding(100);
 | |
|   for (int i = 0; i <= 20; i++) {
 | |
|     tft.drawFloat(i / 10.0, 1, xpos, ypos, GFXFF);
 | |
|     delay (200);
 | |
|   }
 | |
| 
 | |
|   delay(4000);
 | |
| 
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
|   // Same again but with colours that show bounding boxes
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
| 
 | |
| 
 | |
|   header("With background", TFT_DARKGREY);
 | |
| 
 | |
|   tft.setTextColor(TFT_YELLOW, TFT_BLACK);
 | |
| 
 | |
|   tft.setTextDatum(TC_DATUM); // Centre text on x,y position
 | |
| 
 | |
|   xpos = tft.width() / 2; // Half the screen width
 | |
|   ypos = 50;
 | |
| 
 | |
|   tft.setFreeFont(FSB9);                              // Select the font
 | |
|   tft.drawString("Serif Bold 9pt", xpos, ypos, GFXFF);  // Draw the text string in the selected GFX free font
 | |
|   ypos += tft.fontHeight(GFXFF);                        // Get the font height and move ypos down
 | |
| 
 | |
|   tft.setFreeFont(FSB12);
 | |
|   tft.drawString("Serif Bold 12pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   tft.setFreeFont(FSB18);
 | |
|   tft.drawString("Serif Bold 18pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   tft.setFreeFont(FSBI24);
 | |
|   tft.drawString("Bold Italic 24pt", xpos, ypos, GFXFF);
 | |
|   ypos += tft.fontHeight(GFXFF);
 | |
| 
 | |
|   // Set text padding to 100 pixels wide area to over-write old values on screen
 | |
|   tft.setTextPadding(100);
 | |
|   for (int i = 0; i <= 20; i++) {
 | |
|     tft.drawFloat(i / 10.0, 1, xpos, ypos, GFXFF);
 | |
|     delay (200);
 | |
|   }
 | |
| 
 | |
|   delay(4000);
 | |
| 
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
|   // Now show setting the 12 datum positions works with free fonts
 | |
|   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 | |
| 
 | |
|   // Numbers, floats and strings can be drawn relative to a datum
 | |
|   header("Text with a datum", TFT_BLACK);
 | |
|   tft.setTextColor(TFT_DARKGREY, TFT_BLACK);
 | |
|   tft.setFreeFont(FSS12);
 | |
|   tft.setTextDatum(TL_DATUM);
 | |
|   tft.drawString("[Top left]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(TC_DATUM);
 | |
|   tft.drawString("[Top centre]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(TR_DATUM);
 | |
|   tft.drawString("[Top right]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(ML_DATUM);
 | |
|   tft.drawString("[Middle left]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(MC_DATUM);
 | |
|   tft.drawString("[Middle centre]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(MR_DATUM);
 | |
|   tft.drawString("[Middle right]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(BL_DATUM);
 | |
|   tft.drawString("[Bottom left]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(BC_DATUM);
 | |
|   tft.drawString("[Bottom centre]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(BR_DATUM);
 | |
|   tft.drawString("[Bottom right]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(L_BASELINE);
 | |
|   tft.drawString("[Left baseline]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(C_BASELINE);
 | |
|   tft.drawString("[Centre baseline]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   tft.fillRect(0, 80, 320, 80, TFT_BLACK);
 | |
|   tft.setTextDatum(R_BASELINE);
 | |
|   tft.drawString("[Right baseline]", 160, 120, GFXFF);
 | |
|   drawDatumMarker(160,120);
 | |
|   delay(1000);
 | |
| 
 | |
|   //while(1);
 | |
|   delay(8000);
 | |
| 
 | |
| }
 | |
| 
 | |
| // Print the header for a display screen
 | |
| void header(const char *string, uint16_t color)
 | |
| {
 | |
|   tft.fillScreen(color);
 | |
|   tft.setTextSize(1);
 | |
|   tft.setTextColor(TFT_MAGENTA, TFT_BLUE);
 | |
|   tft.fillRect(0, 0, 320, 30, TFT_BLUE);
 | |
|   tft.setTextDatum(TC_DATUM);
 | |
|   tft.drawString(string, 160, 2, 4); // Font 4 for fast drawing with background
 | |
| }
 | |
| 
 | |
| // Draw a + mark centred on x,y
 | |
| void drawDatumMarker(int x, int y)
 | |
| {
 | |
|   tft.drawLine(x - 5, y, x + 5, y, TFT_GREEN);
 | |
|   tft.drawLine(x, y - 5, x, y + 5, TFT_GREEN);
 | |
| }
 | |
| 
 | |
| 
 | |
| // There follows a crude way of flagging that this example sketch needs fonts which
 | |
| // have not been enbabled in the User_Setup.h file inside the TFT_HX8357 library.
 | |
| //
 | |
| // These lines produce errors during compile time if settings in User_Setup are not correct
 | |
| //
 | |
| // The error will be "does not name a type" but ignore this and read the text between ''
 | |
| // it will indicate which font or feature needs to be enabled
 | |
| //
 | |
| // Either delete all the following lines if you do not want warnings, or change the lines
 | |
| // to suit your sketch modifications.
 | |
| 
 | |
| #ifndef LOAD_GLCD
 | |
| //ERROR_Please_enable_LOAD_GLCD_in_User_Setup
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_FONT2
 | |
| //ERROR_Please_enable_LOAD_FONT2_in_User_Setup!
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_FONT4
 | |
| //ERROR_Please_enable_LOAD_FONT4_in_User_Setup!
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_FONT6
 | |
| //ERROR_Please_enable_LOAD_FONT6_in_User_Setup!
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_FONT7
 | |
| //ERROR_Please_enable_LOAD_FONT7_in_User_Setup!
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_FONT8
 | |
| //ERROR_Please_enable_LOAD_FONT8_in_User_Setup!
 | |
| #endif
 | |
| 
 | |
| #ifndef LOAD_GFXFF
 | |
| ERROR_Please_enable_LOAD_GFXFF_in_User_Setup!
 | |
| #endif
 | |
| 
 |