OK. I think I have it fixed.
Your data is too big to fit into 64kB so you can't use the usual 16-bit pointers and array indexing. It took a while but I finally found that casting the frames to 'uint_farptr_t' (a.k.a. 'uint32_t') I could store the PROGMEM address in an array. Then, using "pgm_read_dword**_far**" you can fetch each pixel as a dword from a calculated PROGMEM address.
It compiles fine for an Arduino Mega 2560.
/* Arduino 256 RGB LEDs Matrix Animation Frame
Using WS2812 LED Strips
Created by Barre
*/
#include <avr/pgmspace.h> // Needed to store stuff in Flash using PROGMEM
#include "FastLED.h" // Fastled library to control the LEDs
#include "xmas.h"
// How many leds are connected?
#define NUM_LEDS 256
// Define the Data Pin
const byte DATA_PIN = RX; // Connected to the data pin of the first LED strip
// Define the trasistor pin
const byte R_PIN = D2;
// Define the array of leds
CRGB leds[NUM_LEDS];
const uint_farptr_t Xitems[77] =
{
(uint_farptr_t)Xmas001, (uint_farptr_t)Xmas002, (uint_farptr_t)Xmas003,
(uint_farptr_t)Xmas004, (uint_farptr_t)Xmas005, (uint_farptr_t)Xmas006,
(uint_farptr_t)Xmas007, (uint_farptr_t)Xmas008, (uint_farptr_t)Xmas009,
(uint_farptr_t)Xmas010, (uint_farptr_t)Xmas011, (uint_farptr_t)Xmas012,
(uint_farptr_t)Xmas013, (uint_farptr_t)Xmas014, (uint_farptr_t)Xmas015,
(uint_farptr_t)Xmas016, (uint_farptr_t)Xmas017, (uint_farptr_t)Xmas018,
(uint_farptr_t)Xmas019, (uint_farptr_t)Xmas020, (uint_farptr_t)Xmas021,
(uint_farptr_t)Xmas022, (uint_farptr_t)Xmas023, (uint_farptr_t)Xmas024,
(uint_farptr_t)Xmas025, (uint_farptr_t)Xmas026, (uint_farptr_t)Xmas027,
(uint_farptr_t)Xmas028, (uint_farptr_t)Xmas029, (uint_farptr_t)Xmas030,
(uint_farptr_t)Xmas031, (uint_farptr_t)Xmas032, (uint_farptr_t)Xmas033,
(uint_farptr_t)Xmas034, (uint_farptr_t)Xmas035, (uint_farptr_t)Xmas036,
(uint_farptr_t)Xmas037, (uint_farptr_t)Xmas038, (uint_farptr_t)Xmas039,
(uint_farptr_t)Xmas040, (uint_farptr_t)Xmas041, (uint_farptr_t)Xmas042,
(uint_farptr_t)Xmas043, (uint_farptr_t)Xmas044, (uint_farptr_t)Xmas045,
(uint_farptr_t)Xmas046, (uint_farptr_t)Xmas047, (uint_farptr_t)Xmas048,
(uint_farptr_t)Xmas049, (uint_farptr_t)Xmas050, (uint_farptr_t)Xmas051,
(uint_farptr_t)Xmas052, (uint_farptr_t)Xmas053, (uint_farptr_t)Xmas054,
(uint_farptr_t)Xmas055, (uint_farptr_t)Xmas056, (uint_farptr_t)Xmas057,
(uint_farptr_t)Xmas058, (uint_farptr_t)Xmas059, (uint_farptr_t)Xmas060,
(uint_farptr_t)Xmas061, (uint_farptr_t)Xmas062, (uint_farptr_t)Xmas063,
(uint_farptr_t)Xmas064, (uint_farptr_t)Xmas065, (uint_farptr_t)Xmas066,
(uint_farptr_t)Xmas067, (uint_farptr_t)Xmas068, (uint_farptr_t)Xmas069,
(uint_farptr_t)Xmas070, (uint_farptr_t)Xmas071, (uint_farptr_t)Xmas072,
(uint_farptr_t)Xmas073, (uint_farptr_t)Xmas074, (uint_farptr_t)Xmas075,
(uint_farptr_t)Xmas076, (uint_farptr_t)Xmas077
};
void setup()
{
pinMode(R_PIN, OUTPUT);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // Init of the Fastled library
FastLED.setBrightness(50);
FastLED.clear();
}
void loop()
{
//digitalWrite(R_PIN, HIGH); // turn transistor ON
// LEDMATRIX();
RUNMATRIX();
}
void RUNMATRIX()
{
// Frame 1-77
FastLED.clear();
for (byte frame = 0; frame < sizeof(Xitems) / sizeof(Xitems[0]); frame++)
{
uint_farptr_t ptr = Xitems[frame];
for (long i = 0; i < NUM_LEDS; i++)
{
// Each pixel is a 'long' (a.k.a. 'dword')
leds[i] = pgm_read_dword_far (ptr + (i * sizeof (long)));
}
FastLED.show();
delay(400);
}
}