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