TFT_eSPI/examples/Sprite/Rotated_Sprite_3/Rotated_Sprite_3.ino

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