141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
/*====================================================================================
 | 
						|
 | 
						|
  This example draws a jpeg image in a Sprite then plot a rotated copy of the Sprite
 | 
						|
  to the TFT.
 | 
						|
 | 
						|
  The jpeg used in in the sketch Data folder (presss Ctrl+K to see folder)
 | 
						|
 | 
						|
  The jpeg must be uploaded to the ESP8266 or ESP32 SPIFFS by using the Tools menu
 | 
						|
  sketch data upload option of the Arduino IDE. If you do not have that option it can
 | 
						|
  be added. Close the Serial Monitor window before uploading to avoid an error message!
 | 
						|
 | 
						|
  To add the upload option for the ESP8266 see:
 | 
						|
  http://www.esp8266.com/viewtopic.php?f=32&t=10081
 | 
						|
  https://github.com/esp8266/arduino-esp8266fs-plugin/releases
 | 
						|
 | 
						|
  To add the upload option for the ESP32 see:
 | 
						|
  https://github.com/me-no-dev/arduino-esp32fs-plugin
 | 
						|
 | 
						|
  Created by Bodmer 6/1/19 as an example to the TFT_eSPI library:
 | 
						|
  https://github.com/Bodmer/TFT_eSPI
 | 
						|
 | 
						|
  Extension funtions in the TFT_eFEX library are used to list SPIFFS files and render
 | 
						|
  the jpeg to the TFT and to the Sprite:
 | 
						|
  https://github.com/Bodmer/TFT_eFEX
 | 
						|
 | 
						|
  To render the Jpeg image the JPEGDecoder library is needed, this can be obtained
 | 
						|
  with the IDE library manager, or downloaded from here:
 | 
						|
  https://github.com/Bodmer/JPEGDecoder
 | 
						|
 | 
						|
  ==================================================================================*/
 | 
						|
 | 
						|
//====================================================================================
 | 
						|
//                                  Libraries
 | 
						|
//====================================================================================
 | 
						|
// Call up the SPIFFS FLASH filing system, this is part of the ESP Core
 | 
						|
#define FS_NO_GLOBALS
 | 
						|
#include <FS.h>
 | 
						|
 | 
						|
#ifdef ESP32
 | 
						|
#include "SPIFFS.h" // Needed for ESP32 only
 | 
						|
#endif
 | 
						|
 | 
						|
// https://github.com/Bodmer/TFT_eSPI
 | 
						|
#include <TFT_eSPI.h>                 // Hardware-specific library
 | 
						|
TFT_eSPI tft = TFT_eSPI();            // Invoke custom library
 | 
						|
TFT_eSprite spr = TFT_eSprite(&tft);  // Create Sprite object "spr" with pointer to "tft" object
 | 
						|
 | 
						|
// https://github.com/Bodmer/TFT_eFEX
 | 
						|
#include <TFT_eFEX.h>                 // Include the function extension library
 | 
						|
TFT_eFEX fex = TFT_eFEX(&tft);        // Create TFT_eFX object "fex" with pointer to "tft" object
 | 
						|
 | 
						|
 | 
						|
//====================================================================================
 | 
						|
//                                    Setup
 | 
						|
//====================================================================================
 | 
						|
void setup()
 | 
						|
{
 | 
						|
  Serial.begin(250000); // Used for messages
 | 
						|
 | 
						|
  tft.begin();
 | 
						|
  tft.setRotation(0);  // 0 & 2 Portrait. 1 & 3 landscape
 | 
						|
  tft.fillScreen(TFT_BLACK);
 | 
						|
 | 
						|
  // Create a sprite to hold the jpeg (or part of it)
 | 
						|
  spr.createSprite(80, 64);
 | 
						|
 | 
						|
  // Initialise SPIFFS
 | 
						|
  if (!SPIFFS.begin()) {
 | 
						|
    Serial.println("SPIFFS initialisation failed!");
 | 
						|
    while (1) yield(); // Stay here twiddling thumbs waiting
 | 
						|
  }
 | 
						|
  Serial.println("\r\nInitialisation done.\r\n");
 | 
						|
 | 
						|
  // Lists the files so you can see what is in the SPIFFS
 | 
						|
  fex.listSPIFFS();
 | 
						|
 | 
						|
  // Note the / before the SPIFFS file name must be present, this means the file is in
 | 
						|
  // the root directory of the SPIFFS, e.g. "/tiger.jpg" for a file called "tiger.jpg"
 | 
						|
 | 
						|
  // Send jpeg info to serial port
 | 
						|
  fex.jpegInfo("/Eye_80x64.jpg");
 | 
						|
 | 
						|
  // Draw jpeg iamge in Sprite spr at 0,0
 | 
						|
  fex.drawJpeg("/Eye_80x64.jpg", 0 , 0, &spr);
 | 
						|
}
 | 
						|
 | 
						|
//====================================================================================
 | 
						|
//                                    Loop
 | 
						|
//====================================================================================
 | 
						|
void loop()
 | 
						|
{
 | 
						|
 | 
						|
  tft.fillScreen(random(0xFFFF));
 | 
						|
 | 
						|
 | 
						|
  // Set the TFT pivot point to the centre of the screen
 | 
						|
  tft.setPivot(tft.width() / 2, tft.height() / 2);
 | 
						|
 | 
						|
  // Set Sprite pivot point to centre of Sprite
 | 
						|
  spr.setPivot(spr.width() / 2, spr.height() / 2);
 | 
						|
 | 
						|
  // Push Sprite to the TFT at 0,0 (not rotated)
 | 
						|
  spr.pushSprite(0, 0);
 | 
						|
 | 
						|
  delay(1000);
 | 
						|
 | 
						|
  // Push copies of Sprite rotated through increasing angles 0-360 degrees
 | 
						|
  // with 45 fegree increments
 | 
						|
  for (int16_t angle = 0; angle <= 360; angle += 45) {
 | 
						|
    spr.pushRotated(angle);
 | 
						|
    delay(500);
 | 
						|
  }
 | 
						|
 | 
						|
  delay(2000);
 | 
						|
 | 
						|
  // Move Sprite pivot to a point above the image at 40,-60
 | 
						|
  // (Note: Top left corner is Sprite coordinate 0,0)
 | 
						|
  // The TFT pivot point has already been set to middle of screen.
 | 
						|
  /*                    .Pivot point at 40,-60
 | 
						|
                        ^
 | 
						|
                        |
 | 
						|
                       -60
 | 
						|
                  < 40 >|
 | 
						|
                  ______V______
 | 
						|
                 |             |
 | 
						|
                 |   Sprite    |
 | 
						|
                 |_____________|
 | 
						|
  */
 | 
						|
  spr.setPivot(40, -60);
 | 
						|
 | 
						|
  // Push Sprite to screen rotated about the new pivot points
 | 
						|
  // negative angle rotates Sprite anticlockwise
 | 
						|
  for (int16_t angle = 330; angle >= 0; angle -= 30) {
 | 
						|
    spr.pushRotated(angle);
 | 
						|
    yield(); // Stop watchdog triggering
 | 
						|
  }
 | 
						|
 | 
						|
  delay(5000);
 | 
						|
}
 | 
						|
//====================================================================================
 |