I don’t get this schematic of the RP2040
Pins don’t match up?
So, I just compiled the code you posted Above , Cut and Paste,
compile gave me D2 not defined , Hmm There is NO D2 on the RP2040 , It’s A2
put that in and it compiled first stroke, complained about the touch screen stuff. but completed
That’s first thing so do that , and say what happens. (if it doesn’t work then ,
Then look at the schematic and change the SPI defines to match the PIN numbers.)
It should work NO problem.
HTH
GL
PJ
#include <vector>
#include <TFT_eSPI.h>
#include <SPI.h>
#include <SD.h>
#include "AnimatedGIF.h"
#include <string>
AnimatedGIF gif;
TFT_eSPI tft = TFT_eSPI();
// rule: loop GIF at least during 3s, maximum 5 times, and don't loop/animate longer than 30s per GIF
const int maxLoopIterations = 1; // stop after this amount of loops
const int maxLoopsDuration = 3000; // ms, max cumulated time after the GIF will break loop
const int maxGifDuration =240000; // ms, max GIF duration
// used to center image based on GIF dimensions
static int xOffset = 0;
static int yOffset = 0;
static int totalFiles = 0; // GIF files count
static int currentFile = 0;
static int lastFile = -1;
char GifComment[256];
static File FSGifFile; // temp gif file holder
static File GifRootFolder; // directory listing
std::vector<std::string> GifFiles; // GIF files path
#define DISPLAY_WIDTH 240
static void MyCustomDelay( unsigned long ms ) {
delay( ms );
// log_d("delay %d\n", ms);
}
static void * GIFOpenFile(const char *fname, int32_t *pSize)
{
// log_d("GIFOpenFile( %s )\n", fname );
FSGifFile = SD.open(fname);
if (FSGifFile) {
*pSize = FSGifFile.size();
return (void *)&FSGifFile;
}
return NULL;
}
static void GIFCloseFile(void *pHandle)
{
File *f = static_cast<File *>(pHandle);
if (f != NULL)
f->close();
}
static int32_t GIFReadFile(GIFFILE *pFile, uint8_t *pBuf, int32_t iLen)
{
int32_t iBytesRead;
iBytesRead = iLen;
File *f = static_cast<File *>(pFile->fHandle);
// Note: If you read a file all the way to the last byte, seek() stops working
if ((pFile->iSize - pFile->iPos) < iLen)
iBytesRead = pFile->iSize - pFile->iPos - 1; // <-- ugly work-around
if (iBytesRead <= 0)
return 0;
iBytesRead = (int32_t)f->read(pBuf, iBytesRead);
pFile->iPos = f->position();
return iBytesRead;
}
static int32_t GIFSeekFile(GIFFILE *pFile, int32_t iPosition)
{
int i = micros();
File *f = static_cast<File *>(pFile->fHandle);
f->seek(iPosition);
pFile->iPos = (int32_t)f->position();
i = micros() - i;
// log_d("Seek time = %d us\n", i);
return pFile->iPos;
}
static void TFTDraw(int x, int y, int w, int h, uint16_t* lBuf )
{
tft.pushRect( x+xOffset, y+yOffset, w, h, lBuf );
}
// Draw a line of image directly on the LCD
void GIFDraw(GIFDRAW *pDraw)
{
uint8_t *s;
uint16_t *d, *usPalette, usTemp[320];
int x, y, iWidth;
iWidth = pDraw->iWidth;
if (iWidth > DISPLAY_WIDTH)
iWidth = DISPLAY_WIDTH;
usPalette = pDraw->pPalette;
y = pDraw->iY + pDraw->y; // current line
s = pDraw->pPixels;
if (pDraw->ucDisposalMethod == 2) {// restore to background color
for (x=0; x<iWidth; x++) {
if (s[x] == pDraw->ucTransparent)
s[x] = pDraw->ucBackground;
}
pDraw->ucHasTransparency = 0;
}
// Apply the new pixels to the main image
if (pDraw->ucHasTransparency) { // if transparency used
uint8_t *pEnd, c, ucTransparent = pDraw->ucTransparent;
int x, iCount;
pEnd = s + iWidth;
x = 0;
iCount = 0; // count non-transparent pixels
while(x < iWidth) {
c = ucTransparent-1;
d = usTemp;
while (c != ucTransparent && s < pEnd) {
c = *s++;
if (c == ucTransparent) { // done, stop
s--; // back up to treat it like transparent
} else { // opaque
*d++ = usPalette[c];
iCount++;
}
} // while looking for opaque pixels
if (iCount) { // any opaque pixels?
TFTDraw( pDraw->iX+x, y, iCount, 1, (uint16_t*)usTemp );
x += iCount;
iCount = 0;
}
// no, look for a run of transparent pixels
c = ucTransparent;
while (c == ucTransparent && s < pEnd) {
c = *s++;
if (c == ucTransparent)
iCount++;
else
s--;
}
if (iCount) {
x += iCount; // skip these
iCount = 0;
}
}
} else {
s = pDraw->pPixels;
// Translate the 8-bit pixels through the RGB565 palette (already byte reversed)
for (x=0; x<iWidth; x++)
usTemp[x] = usPalette[*s++];
TFTDraw( pDraw->iX, y, iWidth, 1, (uint16_t*)usTemp );
}
} /* GIFDraw() */
int gifPlay( char* gifPath )
{ // 0=infinite
gif.begin(BIG_ENDIAN_PIXELS);
if( ! gif.open( gifPath, GIFOpenFile, GIFCloseFile, GIFReadFile, GIFSeekFile, GIFDraw ) ) {
// log_n("Could not open gif %s", gifPath );
return maxLoopsDuration;
}
int frameDelay = 0; // store delay for the last frame
int then = 0; // store overall delay
bool showcomment = false;
// center the GIF !!
int w = gif.getCanvasWidth();
int h = gif.getCanvasHeight();
xOffset = ( tft.width() - w ) /2;
yOffset = ( tft.height() - h ) /2;
if( lastFile != currentFile ) {
// log_n("Playing %s [%d,%d] with offset [%d,%d]", gifPath, w, h, xOffset, yOffset );
lastFile = currentFile;
showcomment = true;
}
while (gif.playFrame(true, &frameDelay)) {
if( showcomment )
if (gif.getComment(GifComment))
// log_n("GIF Comment: %s", GifComment);
then += frameDelay;
if( then > maxGifDuration ) { // avoid being trapped in infinite GIF's
// log_w("Broke the GIF loop, max duration exceeded");
break;
}
}
gif.close();
return then;
}
int getGifInventory( const char* basePath )
{
int amount = 0;
GifRootFolder = SD.open(basePath);
if(!GifRootFolder){
// log_n("Failed to open directory");
return 0;
}
if(!GifRootFolder.isDirectory()){
// log_n("Not a directory");
return 0;
}
File file = GifRootFolder.openNextFile();
tft.setTextColor( TFT_WHITE, TFT_BLACK );
tft.setTextSize( 2 );
int textPosX = tft.width()/2 - 16;
int textPosY = tft.height()/2 - 10;
tft.drawString("GIF Files:", textPosX-40, textPosY-20 );
while( file ) {
if(!file.isDirectory()) {
GifFiles.push_back( file.name() );
amount++;
tft.drawString(String(amount), textPosX, textPosY );
file.close();
}
file = GifRootFolder.openNextFile();
}
GifRootFolder.close();
// log_n("Found %d GIF files", amount);
return amount;
}
void setup()
{
// Serial.begin(115200);
// while (!Serial) ;
// pinMode(D6, OUTPUT);
// digitalWrite(D6, HIGH);
tft.begin();
tft.setRotation(2);
int attempts = 0;
int maxAttempts = 50;
int delayBetweenAttempts = 300;
bool isblinked = false;
pinMode(A2, OUTPUT);
while(! SD.begin(A2) ) {
// log_n("SD Card mount failed! (attempt %d of %d)", attempts, maxAttempts );
isblinked = !isblinked;
attempts++;
if( isblinked ) {
tft.setTextColor( TFT_WHITE, TFT_BLACK );
} else {
tft.setTextColor( TFT_BLACK, TFT_WHITE );
}
tft.drawString( "INSERT SD", tft.width()/2, tft.height()/2 );
if( attempts > maxAttempts ) {
// log_n("Giving up");
}
delay( delayBetweenAttempts );
}
// log_n("SD Card mounted!");
// Serial.print("SD Card mounted!");
tft.begin();
tft.fillScreen(TFT_BLACK);
totalFiles = getGifInventory( "/gif" ); // scan the SD card GIF folder
}
void loop()
{
tft.fillScreen(TFT_BLACK);
const char * fileName = GifFiles[currentFile++%totalFiles].c_str();
const char * fileDir = "/gif/";
char * filePath = (char*)malloc(strlen(fileName)+strlen(fileDir)+1);
strcpy(filePath, fileDir);
strcat(filePath, fileName);
int loops = maxLoopIterations; // max loops
int durationControl = maxLoopsDuration; // force break loop after xxx ms
while(loops-->0 && durationControl > 0 ) {
durationControl -= gifPlay( (char*)filePath );
gif.reset();
}
free(filePath);
}
FQBN: arduino:mbed:nanorp2040connect
Using board 'nanorp2040connect' from platform in folder: C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0
Using core 'arduino' from platform in folder: C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0
Detecting libraries used...
C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/defines.txt @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/cxxflags.txt -DARDUINO_ARCH_RP2040 -mcpu=cortex-m0plus -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_NANO_RP2040_CONNECT -DARDUINO_ARCH_MBED -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/includes.txt C:\Users\Dude\AppData\Local\Temp\arduino\sketches\BFDAA0B353ED6E250B238DE2E79103DF\sketch\sketch_jan10a.ino.cpp -o nul
Alternatives for TFT_eSPI.h: [[email protected]]
ResolveLibrary(TFT_eSPI.h)
-> candidates: [[email protected]]
C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/defines.txt @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/cxxflags.txt -DARDUINO_ARCH_RP2040 -mcpu=cortex-m0plus -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_NANO_RP2040_CONNECT -DARDUINO_ARCH_MBED -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT -Id:\Arduino_projects\libraries\TFT_eSPI -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/includes.txt C:\Users\Dude\AppData\Local\Temp\arduino\sketches\BFDAA0B353ED6E250B238DE2E79103DF\sketch\sketch_jan10a.ino.cpp -o nul
Alternatives for SPI.h: [SPI]
ResolveLibrary(SPI.h)
-> candidates: [SPI]
C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/defines.txt @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/cxxflags.txt -DARDUINO_ARCH_RP2040 -mcpu=cortex-m0plus -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_NANO_RP2040_CONNECT -DARDUINO_ARCH_MBED -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT -Id:\Arduino_projects\libraries\TFT_eSPI -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\libraries\SPI -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/includes.txt C:\Users\Dude\AppData\Local\Temp\arduino\sketches\BFDAA0B353ED6E250B238DE2E79103DF\sketch\sketch_jan10a.ino.cpp -o nul
Alternatives for SD.h: [[email protected]]
ResolveLibrary(SD.h)
-> candidates: [[email protected]]
C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/defines.txt @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/cxxflags.txt -DARDUINO_ARCH_RP2040 -mcpu=cortex-m0plus -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_NANO_RP2040_CONNECT -DARDUINO_ARCH_MBED -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT -Id:\Arduino_projects\libraries\TFT_eSPI -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\libraries\SPI -IC:\Users\Dude\AppData\Local\Arduino15\libraries\SD\src -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated -IC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\cores\arduino @C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\variants\NANO_RP2040_CONNECT/includes.txt C:\Users\Dude\AppData\Local\Temp\arduino\sketches\BFDAA0B353ED6E250B238DE2E79103DF\sketch\sketch_jan10a.ino.cpp -o nul
Alternatives for AnimatedGIF.h: [[email protected]]
ResolveLibrary(AnimatedGIF.h)
-> candidates: [[email protected]]
Edit ----
Linking everything together...
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-g++" -E -P -x c "C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\mbed\\3.3.0\\variants\\NANO_RP2040_CONNECT/linker_script.ld" -o "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/linker_script.ld"
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-g++" "-LC:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF" -Wl,--gc-sections -Wl,--as-needed "@C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\mbed\\3.3.0\\variants\\NANO_RP2040_CONNECT/ldflags.txt" "-TC:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/linker_script.ld" "-Wl,-Map,C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.map" --specs=nosys.specs -o "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.elf" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\sketch\\sketch_jan10a.ino.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\TFT_eSPI\\TFT_eSPI.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SPI\\SPI.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SD\\File.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SD\\SD.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SD\\utility\\Sd2Card.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SD\\utility\\SdFile.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\SD\\utility\\SdVolume.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\libraries\\AnimatedGIF\\AnimatedGIF.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\core\\double_tap_usb_boot.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\core\\nina_pins.cpp.o" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF\\core\\variant.cpp.o" -Wl,--whole-archive "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/core\\core.a" "C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\mbed\\3.3.0\\variants\\NANO_RP2040_CONNECT/libs/libmbed.a" -Wl,--no-whole-archive -Wl,--start-group -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -Wl,--end-group
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-objcopy" -O binary "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.elf" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.bin"
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-objcopy" -O ihex -R .eeprom "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.elf" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.hex"
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\rp2040tools\\1.0.6/elf2uf2" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.elf" "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.uf2"
Using library TFT_eSPI at version 2.5.34 in folder: D:\Arduino_projects\libraries\TFT_eSPI
Using library SPI in folder: C:\Users\Dude\AppData\Local\Arduino15\packages\arduino\hardware\mbed\3.3.0\libraries\SPI (legacy)
Using library SD at version 1.2.4 in folder: C:\Users\Dude\AppData\Local\Arduino15\libraries\SD
Using library AnimatedGIF at version 1.4.7 in folder: D:\Arduino_projects\libraries\AnimatedGIF
"C:\\Users\\Dude\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-size" -A "C:\\Users\\Dude\\AppData\\Local\\Temp\\arduino\\sketches\\BFDAA0B353ED6E250B238DE2E79103DF/sketch_jan10a.ino.elf"
Sketch uses 140932 bytes (0%) of program storage space. Maximum is 16777216 bytes.
Global variables use 68992 bytes (25%) of dynamic memory, leaving 201344 bytes for local variables. Maximum is 270336 bytes.
even the schematic calls it “A2”