Skip to content

Commit

Permalink
animated_gif example bugfixes & changes
Browse files Browse the repository at this point in the history
  • Loading branch information
PaintYourDragon committed Nov 2, 2020
1 parent 9880ee6 commit 902c16f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 14 deletions.
36 changes: 23 additions & 13 deletions examples/animated_gif/animated_gif.ino
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// Play GIFs from CIRCUITPY drive (USB-accessible filesystem) to LED matrix.
// ***DESIGNED FOR ADAFRUIT MATRIXPORTAL M4***, but may run on some other
// M4 & M0 and nRF52 boards (relies on TinyUSB stack). As written, runs on
// 64x32 pixel matrix, this can be changed by editing the addrPins[] array
// (height) and/or matrix constructor call (width). See the "simple" example
// for a run-down on matrix configuration.
// 64x32 pixel matrix, this can be changed by editing the WIDTH and HEIGHT
// definitions. See the "simple" example for a run-down on matrix config.
// Adapted from examples from Larry Bank's AnimatedGIF library and
// msc_external_flash example in Adafruit_TinyUSB_Arduino.
// Prerequisite libraries:
Expand All @@ -26,6 +25,10 @@

char GIFpath[] = "/gifs"; // Absolute path to GIFs on CIRCUITPY drive
uint16_t GIFminimumTime = 10; // Min. repeat time (seconds) until next GIF
#define WIDTH 64 // Matrix width in pixels
#define HEIGHT 32 // Matrix height in pixels
// Maximim matrix height is 32px on most boards, 64 on MatrixPortal if the
// 'E' jumper is set.

// FLASH FILESYSTEM STUFF --------------------------------------------------

Expand All @@ -47,28 +50,34 @@ Adafruit_USBD_MSC usb_msc; // USB mass storage object

#if defined(_VARIANT_MATRIXPORTAL_M4_)
uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12};
uint8_t addrPins[] = {17, 18, 19, 20};
uint8_t addrPins[] = {17, 18, 19, 20, 21}; // 16/32/64 pixels tall
uint8_t clockPin = 14;
uint8_t latchPin = 15;
uint8_t oePin = 16;
#define BACK_BUTTON 2
#define NEXT_BUTTON 3
#elif defined(_VARIANT_METRO_M4_)
uint8_t rgbPins[] = {2, 3, 4, 5, 6, 7};
uint8_t addrPins[] = {A0, A1, A2, A3};
uint8_t addrPins[] = {A0, A1, A2, A3}; // 16 or 32 pixels tall
uint8_t clockPin = A4;
uint8_t latchPin = 10;
uint8_t oePin = 9;
#elif defined(_VARIANT_FEATHER_M4_)
uint8_t rgbPins[] = {6, 5, 9, 11, 10, 12};
uint8_t addrPins[] = {A5, A4, A3, A2};
uint8_t addrPins[] = {A5, A4, A3, A2}; // 16 or 32 pixels tall
uint8_t clockPin = 13;
uint8_t latchPin = 0;
uint8_t oePin = 1;
#endif
#if HEIGHT == 16
#define NUM_ADDR_PINS 3
#elif HEIGHT == 32
#define NUM_ADDR_PINS 4
#elif HEIGHT == 64
#define NUM_ADDR_PINS 5
#endif

// Matrix width is first arg here, height is inferred from addrPins[]
Adafruit_Protomatter matrix(64, 6, 1, rgbPins, sizeof addrPins, addrPins,
Adafruit_Protomatter matrix(WIDTH, 6, 1, rgbPins, NUM_ADDR_PINS, addrPins,
clockPin, latchPin, oePin, true);

// ANIMATEDGIF LIBRARY STUFF -----------------------------------------------
Expand Down Expand Up @@ -333,7 +342,6 @@ void loop() {
GIFisOpen = false;
}
GIFindex += GIFincrement; // Fwd or back 1 file
GIFincrement = 0; // Reset increment flag
int num_files = numFiles(GIFpath, "GIF");
if(GIFindex >= num_files) GIFindex = 0; // 'Wrap around' file index
else if(GIFindex < 0) GIFindex = num_files - 1; // both directions
Expand All @@ -352,15 +360,17 @@ void loop() {
yPos = (matrix.height() - GIF.getCanvasHeight()) / 2;
GIFisOpen = true;
GIFstartTime = millis();
GIFincrement = 0; // Reset increment flag
}
}
} else if(GIFisOpen) {
if (GIF.playFrame(true, NULL)) {
if (GIF.playFrame(true, NULL) >= 0) { // Auto resets to start if needed
matrix.show();
} else if ((millis() - GIFstartTime) < (GIFminimumTime * 1000)) {
GIF.reset(); // Minimum time hasn't elapsed yet, repeat this GIF
if ((millis() - GIFstartTime) >= (GIFminimumTime * 1000)) {
GIFincrement = 1; // Minimum time has elapsed, proceed to next GIF
}
} else {
GIFincrement = 1; // Minimum time has elapsed, proceed to next GIF
GIFincrement = 1; // Decode error, proceed to next GIF
}
}
}
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=Adafruit Protomatter
version=1.0.9
version=1.0.10
author=Adafruit
maintainer=Adafruit <[email protected]>
sentence=A library for Adafruit RGB LED matrices.
Expand Down
10 changes: 10 additions & 0 deletions src/Adafruit_Protomatter.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,16 @@ class Adafruit_Protomatter : public GFXcanvas16 {
*/
void show(void);

/*!
@brief Disable (but do not deallocate) a Protomatter matrix.
*/
void stop(void) { _PM_stop(&core); }

/*!
@brief Resume a previously-stopped matrix.
*/
void resume(void) { _PM_resume(&core); }

/*!
@brief Returns current value of frame counter and resets its value
to zero. Two calls to this, timed one second apart (or use
Expand Down

0 comments on commit 902c16f

Please sign in to comment.