display Gif on Hallowing M4?

Please tell us which board you are using.
For CircuitPython issues, ask in the Adafruit CircuitPython forum.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

display Gif on Hallowing M4?

Post by BonesB »

Hi i have two hallowing m4 boards and i want to be able to display a gif of heart eyes for valentines day. i came across a guide on how to display gifs on a monsterm4sk but nothing about displaying them on these boards

User avatar
mikeysklar
 
Posts: 13936
Joined: Mon Aug 01, 2016 8:10 pm

Re: display Gif on Hallowing M4?

Post by mikeysklar »

There is not a Hallowing specific guide for GIFs, but the display resolution and SAMD51 processor are the same. You can follow the monster m4sk GIF player guide and when necessary use the Arcada Animated GIF guide for customization.

User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

Re: display Gif on Hallowing M4?

Post by BonesB »

I tried following that guide but the UF2 file it says to load onto the board does not work

User avatar
mikeysklar
 
Posts: 13936
Joined: Mon Aug 01, 2016 8:10 pm

Re: display Gif on Hallowing M4?

Post by mikeysklar »

You will not be able to use the UF2 image that was designed for the Monster M4SK.

Take a look at the other link for using a PyPortal to play animated GIFs.

https://learn.adafruit.com/pyportal-ani ... if-display

User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

Re: display Gif on Hallowing M4?

Post by BonesB »

been trying to get it to work in arduino ide when i try to upload i get the following error

Code: Select all

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "Adafruit Hallowing M4 (SAMD51), Enabled, 180 MHz (overclock), Faster (-O3), 50 MHz (standard), TinyUSB, Off"

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:90:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setStartDrawingCallback(callback)'

   90 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setStartDrawingCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:90:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setStartDrawingCallback(callback)' previously declared here

   90 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setStartDrawingCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:96:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setUpdateScreenCallback(callback)'

   96 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setUpdateScreenCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:96:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setUpdateScreenCallback(callback)' previously declared here

   96 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setUpdateScreenCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:102:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawPixelCallback(pixel_callback)'

  102 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawPixelCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:102:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawPixelCallback(pixel_callback)' previously declared here

  102 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawPixelCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:108:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawLineCallback(line_callback)'

  108 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawLineCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:108:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawLineCallback(line_callback)' previously declared here

  108 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setDrawLineCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:114:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setScreenClearCallback(callback)'

  114 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setScreenClearCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:114:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setScreenClearCallback(callback)' previously declared here

  114 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setScreenClearCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:120:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileSeekCallback(file_seek_callback)'

  120 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileSeekCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:120:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileSeekCallback(file_seek_callback)' previously declared here

  120 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileSeekCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:126:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFilePositionCallback(file_position_callback)'

  126 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFilePositionCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:126:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFilePositionCallback(file_position_callback)' previously declared here

  126 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFilePositionCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:132:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadCallback(file_read_callback)'

  132 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:132:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadCallback(file_read_callback)' previously declared here

  132 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadCallback(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:138:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadBlockCallback(file_read_block_callback)'

  138 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:138:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::setFileReadBlockCallback(file_read_block_callback)' previously declared here

  138 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:145:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::backUpStream(int)'

  145 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::backUpStream(int n) {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:145:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::backUpStream(int)' previously declared here

  145 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::backUpStream(int n) {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:151:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readByte()'

  151 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readByte() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:151:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readByte()' previously declared here

  151 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readByte() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:164:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readWord()'

  164 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readWord() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:164:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readWord()' previously declared here

  164 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readWord() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:173:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readIntoBuffer(void*, int)'

  173 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readIntoBuffer(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:173:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readIntoBuffer(void*, int)' previously declared here

  173 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::readIntoBuffer(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:202:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageDataRect(uint8_t, int, int, int, int)'

  202 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageDataRect(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:202:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageDataRect(uint8_t, int, int, int, int)' previously declared here

  202 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageDataRect(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:219:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageData(uint8_t)'

  219 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageData(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:219:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageData(uint8_t)' previously declared here

  219 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::fillImageData(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:229:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::copyImageDataRect(uint8_t*, uint8_t*, int, int, int, int)'

  229 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::copyImageDataRect(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:229:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::copyImageDataRect(uint8_t*, uint8_t*, int, int, int, int)' previously declared here

  229 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::copyImageDataRect(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:245:6: error: redefinition of 'bool GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGifHeader()'

  245 | bool GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGifHeader() {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:245:6: note: 'bool GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGifHeader()' previously declared here

  245 | bool GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGifHeader() {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:260:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseLogicalScreenDescriptor()'

  260 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  261 |                 lzwMaxBits>::parseLogicalScreenDescriptor() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:260:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseLogicalScreenDescriptor()' previously declared here

  260 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  261 |                 lzwMaxBits>::parseLogicalScreenDescriptor() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:287:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGlobalColorTable()'

  287 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  288 |                 lzwMaxBits>::parseGlobalColorTable() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:287:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGlobalColorTable()' previously declared here

  287 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  288 |                 lzwMaxBits>::parseGlobalColorTable() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:309:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parsePlainTextExtension()'

  309 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  310 |                 lzwMaxBits>::parsePlainTextExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:309:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parsePlainTextExtension()' previously declared here

  309 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  310 |                 lzwMaxBits>::parsePlainTextExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:331:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGraphicControlExtension()'

  331 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  332 |                 lzwMaxBits>::parseGraphicControlExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:331:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGraphicControlExtension()' previously declared here

  331 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  332 |                 lzwMaxBits>::parseGraphicControlExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:372:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseApplicationExtension()'

  372 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  373 |                 lzwMaxBits>::parseApplicationExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:372:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseApplicationExtension()' previously declared here

  372 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  373 |                 lzwMaxBits>::parseApplicationExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:405:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseCommentExtension()'

  405 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  406 |                 lzwMaxBits>::parseCommentExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:405:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseCommentExtension()' previously declared here

  405 | void GifDecoder<maxGifWidth, maxGifHeight,

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  406 |                 lzwMaxBits>::parseCommentExtension() {

      |                 ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:435:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGIFFileTerminator()'

  435 | int GifDecoder<maxGifWidth, maxGifHeight,

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  436 |                lzwMaxBits>::parseGIFFileTerminator() {

      |                ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:435:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseGIFFileTerminator()' previously declared here

  435 | int GifDecoder<maxGifWidth, maxGifHeight,

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  436 |                lzwMaxBits>::parseGIFFileTerminator() {

      |                ~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:458:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseTableBasedImage()'

  458 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseTableBasedImage() {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:458:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseTableBasedImage()' previously declared here

  458 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseTableBasedImage() {

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:644:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseData()'

  644 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseData() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:644:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseData()' previously declared here

  644 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::parseData() {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:718:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::startDecoding()'

  718 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::startDecoding(void) {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:718:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::startDecoding()' previously declared here

  718 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::startDecoding(void) {

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:744:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decodeFrame(bool)'

  744 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decodeFrame(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:744:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decodeFrame(bool)' previously declared here

  744 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decodeFrame(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:2:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:780:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decompressAndDisplayFrame(long unsigned int)'

  780 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:181,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder_Impl.h:780:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::decompressAndDisplayFrame(long unsigned int)' previously declared here

  780 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:3:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:40:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_setTempBuffer(uint8_t*)'

   40 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_setTempBuffer(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:182,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:40:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_setTempBuffer(uint8_t*)' previously declared here

   40 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_setTempBuffer(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:3:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:49:6: error: redefinition of 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode_init(int)'

   49 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode_init(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:182,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:49:6: note: 'void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode_init(int)' previously declared here

   49 | void GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode_init(

      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:3:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:72:12: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_get_code()'

   72 | inline int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_get_code() {

      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:182,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:72:12: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_get_code()' previously declared here

   72 | inline int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_get_code() {

      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:3:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:120:5: error: redefinition of 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode(uint8_t*, int, uint8_t*)'

  120 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/Arcada_GifDecoder.h:182,

                 from C:\Users\user\Documents\Arduino\sketch_feb15b\sketch_feb15b.ino:1:

C:\Users\user\Documents\Arduino\libraries\Adafruit_Arcada_GifDecoder\src/LzwDecoder_Impl.h:120:5: note: 'int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode(uint8_t*, int, uint8_t*)' previously declared here

  120 | int GifDecoder<maxGifWidth, maxGifHeight, lzwMaxBits>::lzw_decode(

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Multiple libraries were found for "Adafruit_TinyUSB.h"

 Used: C:\Users\user\Documents\Arduino\libraries\Adafruit_TinyUSB_Library

 Not used: C:\Users\user\Documents\ArduinoData\packages\adafruit\hardware\samd\1.7.11\libraries\Adafruit_TinyUSB_Arduino

Multiple libraries were found for "Adafruit_ZeroDMA.h"

 Used: C:\Users\user\Documents\ArduinoData\packages\adafruit\hardware\samd\1.7.11\libraries\Adafruit_ZeroDMA

 Not used: C:\Users\user\Documents\Arduino\libraries\Adafruit_Zero_DMA_Library

exit status 1

Error compiling for board Adafruit Hallowing M4 (SAMD51).



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

User avatar
mikeysklar
 
Posts: 13936
Joined: Mon Aug 01, 2016 8:10 pm

Re: display Gif on Hallowing M4?

Post by mikeysklar »

What code are you running for the sketch that failed to compile?

Did you install all of these libraries?

https://learn.adafruit.com/pyportal-ani ... -libraries

User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

Re: display Gif on Hallowing M4?

Post by BonesB »

i didnt include any code, i was following the instructions on this page and included the gifdecoder library and the acadia library and tried to upload

Code: Select all

#include <Arcada_GifDecoder.h>
#include <Arcada_GifDecoder_Impl.h>
#include <LzwDecoder_Impl.h>

#include <Adafruit_APDS9960.h>

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

Re: display Gif on Hallowing M4?

Post by BonesB »

the included code was from uploading the blink sketch from the pervious page which uploaded to the board without issue

User avatar
BonesB
 
Posts: 7
Joined: Sat Jan 28, 2023 8:30 pm

Re: display Gif on Hallowing M4?

Post by BonesB »

update i found sucess in running this example code found on the github for the gifdecoder library but now im having an issue with colors displaying correctly

Code: Select all

  if (!arcada.arcadaBegin()) {
    Serial.println("Couldn't start Arcada");
    while(1) yield();
  }
  // If we are using TinyUSB & QSPI we will have the filesystem show up!
  arcada.filesysBeginMSD();

  //while (!Serial) delay(10);
  
  Serial.begin(115200);
  Serial.println("Animated GIFs Demo");
  
  arcada.displayBegin();
  arcada.display->fillScreen(ARCADA_BLUE);
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
  arcada.display2->fillScreen(ARCADA_BLUE);
#endif
  arcada.setBacklight(255);

  if (arcada.filesysBegin()) {
    Serial.println("Found filesystem!");
  } else {
    arcada.haltBox("No filesystem found! For QSPI flash, load CircuitPython. For SD cards, format with FAT");
  }

  if (! arcada.loadConfigurationFile()) {
     arcada.infoBox("No configuration file found, using default 10 seconds per GIF");
     arcada.display->fillScreen(ARCADA_BLUE);
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
     arcada.display2->fillScreen(ARCADA_BLUE);
#endif
  } else if (! arcada.configJSON.containsKey("seconds_per_gif")) {
     Serial.println("Found config but no key");
     arcada.infoBox("Configuration doesn't contain 'seconds_per_gif', using default 10 seconds per GIF");
     arcada.display->fillScreen(ARCADA_BLUE);
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
     arcada.display2->fillScreen(ARCADA_BLUE);
#endif
  } else {
    displayTimeSeconds = arcada.configJSON["seconds_per_gif"];
  }
  Serial.printf("Playing GIFs for at least %d seconds per\n", displayTimeSeconds);

#ifdef SERVOPIN
  // example of how to have a servo move at the same time
  myservo.attach(SERVOPIN);
  myservo.write(70);
#endif
}

uint32_t fileStartTime = displayTimeSeconds * -1001;
uint32_t cycle_start = 0L;
int file_index = -1;
int8_t nextGIF = 0;       // 0 for no change, +1 for next gif, -1 for previous gif

void loop() {
    if (arcada.recentUSB()) { 
      nextGIF = 1;  // restart when we get back
      return;       // prioritize USB over GIF decoding
    }

    // Check button presses
    arcada.readButtons();
    uint8_t buttons = arcada.justPressedButtons();
    if (buttons & PREV_GIF_BUTTON) {
      nextGIF = -1;   // back
    }
    if (buttons & NEXT_GIF_BUTTON ) {
      nextGIF = 1;   // forward
    }
    if (buttons & BRIGHTER_BUTTON) {
      int16_t newbrightness = arcada.getBacklight();   // brightness up
      newbrightness = min(255, newbrightness+25);      // about 10 levels
      Serial.printf("New brightness %d", newbrightness);
      arcada.setBacklight(newbrightness, true);   // save to disk
    }
    if (buttons & DIMMER_BUTTON) {
      int16_t newbrightness = arcada.getBacklight();   // brightness down
      newbrightness = max(25, newbrightness-25);       // about 10 levels
      Serial.printf("New brightness %d", newbrightness);
      arcada.setBacklight(newbrightness, true);   // save to disk
    }

    uint32_t now = millis();
    if( ((now - fileStartTime) > (displayTimeSeconds * 1000)) &&
        (decoder.getCycleNo() > 1)) // at least one 'cycle' elapsed
    {
        nextGIF = 1;
    }

    if (nextGIF != 0) {
      // Print the stats for this GIF      
      char buf[80];
      int32_t frames       = decoder.getFrameCount();
      int32_t cycle_design = decoder.getCycleTime();  // Intended duration
      int32_t cycle_actual = now - cycle_start;       // Actual duration
      int32_t percent = 100 * cycle_design / cycle_actual;
      sprintf(buf, "[%ld frames = %ldms] actual: %ldms speed: %ld%%",
              frames, cycle_design, cycle_actual, percent);
      Serial.println(buf);
    }

    if (nextGIF != 0) {
        cycle_start = now;
        if (! arcada.chdir(GIF_DIRECTORY)) {
          arcada.errorBox("No '" GIF_DIRECTORY "' directory found!\nPlease create it & continue");
          return;
        } 

        int num_files = arcada.filesysListFiles(GIF_DIRECTORY, "GIF");
        if (num_files == 0) {
          arcada.errorBox("No GIF files found! Please add some & press (A) to continue");
          return;
        }

        // Determine how many animated GIF files exist
        Serial.print("Animated GIF files Found: ");  Serial.println(num_files);
        file_index += nextGIF;
        if (file_index >= num_files) {
          file_index = 0;                // wrap around to first file
        }
        if (file_index < 0) {
          file_index = num_files-1;      // wrap around to last file
        }
        nextGIF = 0; // and we're done moving between GIFs
        
        file = arcada.openFileByIndex(GIF_DIRECTORY, file_index, O_READ, "GIF");
        if (!file) {
          return;
        }

        arcada.display->dmaWait();
        arcada.display->endWrite();   // End transaction from any prior callback
        arcada.display->fillScreen(ARCADA_BLACK);
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
        arcada.display2->dmaWait();
        arcada.display2->endWrite();   // End transaction from any prior callback
        arcada.display2->fillScreen(ARCADA_BLACK);
        // speed up them pixels!
        SPI.setClockSource(SERCOM_CLOCK_SOURCE_100M);
        SPI1.setClockSource(SERCOM_CLOCK_SOURCE_100M);
#endif
        decoder.startDecoding();

        // Center the GIF
        uint16_t w, h;
        decoder.getSize(&w, &h);
        Serial.print("Width: "); Serial.print(w); Serial.print(" height: "); Serial.println(h);
        if (w < arcada.display->width()) {
          gif_offset_x = (arcada.display->width() - w) / 2;
        } else {
          gif_offset_x = 0;
        }
        if (h < arcada.display->height()) {
          gif_offset_y = (arcada.display->height() - h) / 2;
        } else {
          gif_offset_y = 0;
        }

        // Note current time for terminating animation later
        fileStartTime = millis();
    }

    decoder.decodeFrame();
}

/******************************* Drawing functions */

void updateScreenCallback(void) {  }

void screenClearCallback(void) {  }

void drawPixelCallback(int16_t x, int16_t y, uint8_t red, uint8_t green, uint8_t blue) {
    arcada.display->drawPixel(x, y, arcada.display->color565(red, green, blue));
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
    arcada.display2->drawPixel(x, y, arcada.display->color565(red, green, blue));
#endif
}

void drawLineCallback(int16_t x, int16_t y, uint8_t *buf, int16_t w, uint16_t *palette, int16_t skip) {
    uint16_t maxline = arcada.display->width();
    bool splitdisplay = false;
    
    uint8_t pixel;
    //uint32_t t = millis();
    x += gif_offset_x;
    y += gif_offset_y;
    if (y >= arcada.display->height() || x >= maxline ) {
      return;
    }
    
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
    // two possibilities
    if ((x + w) > 2*maxline) {
      w = 2*maxline - x;
    } 
    if ((x + w) > maxline) {
      splitdisplay = true;  // split the gif over both displays
    }
#else
    if (x + w > maxline) {
      w = maxline - x;
    }
#endif
    if (w <= 0) return;

    //Serial.printf("Line (%d, %d) %d pixels skipping %d\n", x, y, w, skip);

    uint16_t buf565[2][w];
    bool first = true; // First write op on this line?
    uint8_t bufidx = 0;
    uint16_t *ptr;

    for (int i = 0; i < w; ) {
        int n = 0, startColumn = i;
        ptr = &buf565[bufidx][0];
        // Handle opaque span of pixels (stop at end of line or first transparent pixel)
        if (skip == -1) {// no transparent pixels
          while(i < w) {
            ptr[n++] = palette[buf[i++]];
          }
        }
        else {
          while((i < w) && ((pixel = buf[i++]) != skip)) {
            ptr[n++] = palette[pixel];
          }
        }
        if (n) {
            arcada.display->dmaWait(); // Wait for prior DMA transfer to complete
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
            arcada.display2->dmaWait(); // Wait for prior DMA transfer to complete
#endif
            if (first) {
              arcada.display->endWrite();   // End transaction from prior callback
              arcada.display->startWrite(); // Start new display transaction
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
              arcada.display2->endWrite();   // End transaction from prior callback
              arcada.display2->startWrite(); // Start new display transaction
#endif
              first = false;
            }
            arcada.display->setAddrWindow(x + startColumn, y, min(maxline, n), 1);
            arcada.display->writePixels(ptr, min(maxline, n), false, true);
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
            if (! splitdisplay) { // same image on both!
              arcada.display2->setAddrWindow(x + startColumn, y, min(maxline, n), 1);
              arcada.display2->writePixels(ptr, min(maxline, n), false, true);
            } else {
              arcada.display2->setAddrWindow(x + startColumn, y, n-maxline, 1);
              arcada.display2->writePixels(ptr+maxline, n-maxline, false, true);
            }
#endif
            bufidx = 1 - bufidx;
        }
    }
//    arcada.display->dmaWait(); // Wait for last DMA transfer to complete
#ifdef ADAFRUIT_MONSTER_M4SK_EXPRESS
    arcada.display2->dmaWait(); // Wait for last DMA transfer to complete
#endif
}


bool fileSeekCallback(unsigned long position) {
  return file.seek(position);
}

unsigned long filePositionCallback(void) { 
  return file.position(); 
}

int fileReadCallback(void) {
    return file.read(); 
}

int fileReadBlockCallback(void * buffer, int numberOfBytes) {
    return file.read((uint8_t*)buffer, numberOfBytes); //.kbv
}


/*
    Animated GIFs Display Code for SmartMatrix and 32x32 RGB LED Panels

    Uses SmartMatrix Library for Teensy 3.1 written by Louis Beaudoin at pixelmatix.com

    Written by: Craig A. Lindley

    Copyright (c) 2014 Craig A. Lindley
    Refactoring by Louis Beaudoin (Pixelmatix)

    Permission is hereby granted, free of charge, to any person obtaining a copy of
    this software and associated documentation files (the "Software"), to deal in
    the Software without restriction, including without limitation the rights to
    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
    the Software, and to permit persons to whom the Software is furnished to do so,
    subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, BANNED
    FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
    COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

/*
    This example displays 32x32 GIF animations loaded from a SD Card connected to the Teensy 3.1
    The GIFs can be up to 32 pixels in width and height.
    This code has been tested with 32x32 pixel and 16x16 pixel GIFs, but is optimized for 32x32 pixel GIFs.

    Wiring is on the default Teensy 3.1 SPI pins, and chip select can be on any GPIO,
    set by defining SD_CS in the code below
    Function     | Pin
    DOUT         |  11
    DIN          |  12
    CLK          |  13
    CS (default) |  15

    This code first looks for .gif files in the /gifs/ directory
    (customize below with the GIF_DIRECTORY definition) then plays random GIFs in the directory,
    looping each GIF for displayTimeSeconds

    This example is meant to give you an idea of how to add GIF playback to your own sketch.
    For a project that adds GIF playback with other features, take a look at
    Light Appliance and Aurora:
    https://github.com/CraigLindley/LightAppliance
    https://github.com/pixelmatix/aurora

    If you find any GIFs that won't play properly, please attach them to a new
    Issue post in the GitHub repo here:
    https://github.com/pixelmatix/AnimatedGIFs/issues
*/

/*
    CONFIGURATION:
    - If you're using SmartLED Shield V4 (or above), uncomment the line that includes <SmartMatrixShieldV4.h>
    - update the "SmartMatrix configuration and memory allocation" section to match the width and height and other configuration of your display
    - Note for 128x32 and 64x64 displays with Teensy 3.2 - need to reduce RAM:
      set kRefreshDepth=24 and kDmaBufferRows=2 or set USB Type: "None" in Arduino,
      decrease refreshRate in setup() to 90 or lower to get good an accurate GIF frame rate
    - Set the chip select pin for your board.  On Teensy 3.5/3.6, the onboard microSD CS pin is "BUILTIN_SDCARD"
*/

User avatar
mikeysklar
 
Posts: 13936
Joined: Mon Aug 01, 2016 8:10 pm

Re: display Gif on Hallowing M4?

Post by mikeysklar »

The colors displaying correctly is likely an issue of gif formatting.

Did you try some of the example GIFs provided for reference?

https://learn.adafruit.com/pyportal-ani ... os-3023065

There are some suggestions for image optimization:

https://learn.adafruit.com/pyportal-ani ... ze-3023016

Locked
Please be positive and constructive with your questions and comments.

Return to “Itsy Bitsy Boards”