#if 1 // change to 0 to generate arrays (see below, near line 180)
#include <FastLED.h>
const size_t ledsCount = 32 * 8;
CRGB leds[ledsCount];
//---------------------------------------------------------------------------
const uint32_t frame00[] PROGMEM =
{
0x02FFFFFF, 0x0BFFFFFF, 0x14FFFFFF, 0x1BFF0000, 0x1CFF0000,
0x1DFF0000, 0x21FF0000, 0x24FF0000, 0x25FF0000, 0x28FFFFFF,
0x31FFFFFF, 0x3AFFFFFF, 0x40FFFFFF, 0x48FFFFFF, 0x51FFFFFF,
0x59FF0000, 0x5AFF0000, 0x5BFF0000, 0x5CFF0000, 0x5FFF0000,
0x60FFFFFF, 0x62FF0000, 0x63FF0000, 0x64FF0000, 0x65FF0000,
0x66FF0000, 0x67FF0000, 0x82FFFFFF, 0x8BFFFFFF, 0x94FFFFFF,
0x98FFFFFF, 0x99FFFFFF, 0x9AFFFFFF, 0x9BFFFFFF, 0x9CFFFFFF,
0x9DFFFFFF, 0xA2FF99CC, 0xA4FF99CC, 0xA5FF99CC, 0xA7FF99CC,
0xB1FFFFFF, 0xBAFFFFFF, 0xC0FFFFFF, 0xC8FFFFFF, 0xD1FFFFFF,
0xD8FF99CC, 0xD9FF99CC, 0xDAFF99CC, 0xDBFF99CC, 0xDCFF99CC,
0xDDFF99CC, 0xE0FFFFFF, 0xE1FFFFFF, 0xE2FFFFFF, 0xE3FF99CC,
0xE4FF0000, 0xE5FF0000, 0xE6FF99CC, 0xE7FFFFFF, 0xE8FFFFFF,
0xE9FFFFFF, 0xEAFFFFFF, 0xEBFFFFFF, 0xECFFFFFF, 0xEDFFFFFF,
0xEEFFFFFF, 0xEFFFFFFF, 0xF0FFFFFF, 0xF1FFFFFF, 0xF2FFFFFF,
0xF3FFFFFF, 0xF4FFFFFF, 0xF5FFFFFF, 0xF6FFFFFF, 0xF7FFFFFF,
0xF8FFFFFF, 0xF9FFFFFF, 0xFAFFFFFF, 0xFBFFFFFF, 0xFCFFFFFF,
0xFDFFFFFF, 0xFEFFFFFF, 0xFFFFFFFF
};
const uint32_t frame01[] PROGMEM =
{
0x1AFF0000, 0x1BFF0000, 0x1CFF0000, 0x22FF0000, 0x25FF0000,
0x26FF0000, 0x2BFFFFFF, 0x34FFFFFF, 0x3DFFFFFF, 0x45FFFFFF,
0x4EFFFFFF, 0x58FF0000, 0x59FF0000, 0x5AFF0000, 0x5BFF0000,
0x5CFF0000, 0x5EFF0000, 0x61FFFFFF, 0x63FF0000, 0x64FF0000,
0x65FF0000, 0x66FF0000, 0x67FF0000, 0x68FF0000, 0x6EFFFFFF,
0x77FFFFFF, 0x7FFFFFFF, 0x97FFFFFF, 0x98FFFFFF, 0x99FFFFFF,
0x9AFFFFFF, 0x9BFFFFFF, 0x9CFFFFFF, 0xA3FF99CC, 0xA5FF99CC,
0xA6FF99CC, 0xA8FF99CC, 0xABFFFFFF, 0xB4FFFFFF, 0xBDFFFFFF,
0xC5FFFFFF, 0xCEFFFFFF, 0xD7FF99CC, 0xD8FF99CC, 0xD9FF99CC,
0xDAFF99CC, 0xDBFF99CC, 0xDCFF99CC, 0xE0FFFFFF, 0xE1FFFFFF,
0xE2FFFFFF, 0xE3FFFFFF, 0xE4FF99CC, 0xE5FF0000, 0xE6FF0000,
0xE7FF99CC, 0xE8FFFFFF, 0xE9FFFFFF, 0xEAFFFFFF, 0xEBFFFFFF,
0xECFFFFFF, 0xEDFFFFFF, 0xEEFFFFFF, 0xEFFFFFFF, 0xF0FFFFFF,
0xF1FFFFFF, 0xF2FFFFFF, 0xF3FFFFFF, 0xF4FFFFFF, 0xF5FFFFFF,
0xF6FFFFFF, 0xF7FFFFFF, 0xF8FFFFFF, 0xF9FFFFFF, 0xFAFFFFFF,
0xFBFFFFFF, 0xFCFFFFFF, 0xFDFFFFFF, 0xFEFFFFFF, 0xFFFFFFFF
};
const uint32_t frame02[] PROGMEM =
{
0x00FFFFFF, 0x08FFFFFF, 0x11FFFFFF, 0x19FF0000, 0x1AFF0000,
0x1BFF0000, 0x20099C1C, 0x23FF0000, 0x26FF0000, 0x27FF0000,
0x42FFFFFF, 0x4BFFFFFF, 0x54FFFFFF, 0x57FF0000, 0x58FF0000,
0x59FF0000, 0x5AFF0000, 0x5BFF0000, 0x5DFF0000, 0x5F099C1C,
0x60099C1C, 0x62FFFFFF, 0x64FF0000, 0x65FF0000, 0x66FF0000,
0x67FF0000, 0x68FF0000, 0x69FF0000, 0x71FFFFFF, 0x7AFFFFFF,
0x80FFFFFF, 0x88FFFFFF, 0x91FFFFFF, 0x96FFFFFF, 0x97FFFFFF,
0x98FFFFFF, 0x99FFFFFF, 0x9AFFFFFF, 0x9BFFFFFF, 0x9F099C1C,
0xA0099C1C, 0xA4FF99CC, 0xA6FF99CC, 0xA7FF99CC, 0xA9FF99CC,
0xC2FFFFFF, 0xCBFFFFFF, 0xD4FFFFFF, 0xD6FF99CC, 0xD7FF99CC,
0xD8FF99CC, 0xD9FF99CC, 0xDAFF99CC, 0xDBFF99CC, 0xE0FFFFFF,
0xE1FFFFFF, 0xE2FFFFFF, 0xE3FFFFFF, 0xE4FFFFFF, 0xE5FF99CC,
0xE6FF0000, 0xE7FF0000, 0xE8FF99CC, 0xE9FFFFFF, 0xEAFFFFFF,
0xEBFFFFFF, 0xECFFFFFF, 0xEDFFFFFF, 0xEEFFFFFF, 0xEFFFFFFF,
0xF0FFFFFF, 0xF1FFFFFF, 0xF2FFFFFF, 0xF3FFFFFF, 0xF4FFFFFF,
0xF5FFFFFF, 0xF6FFFFFF, 0xF7FFFFFF, 0xF8FFFFFF, 0xF9FFFFFF,
0xFAFFFFFF, 0xFBFFFFFF, 0xFCFFFFFF, 0xFDFFFFFF, 0xFEFFFFFF,
0xFFFFFFFF
};
const uint32_t frame03[] PROGMEM =
{
0x05FFFFFF, 0x0EFFFFFF, 0x18FF0000, 0x19FF0000, 0x1AFF0000,
0x21099C1C, 0x24FF0000, 0x27FF0000, 0x28FF0000, 0x2EFFFFFF,
0x37FFFFFF, 0x3FFFFFFF, 0x56FF0000, 0x57FF0000, 0x58FF0000,
0x59FF0000, 0x5AFF0000, 0x5CFF0000, 0x5E099C1C, 0x61099C1C,
0x63FFFFFF, 0x65FF0000, 0x66FF0000, 0x67FF0000, 0x68FF0000,
0x69FF0000, 0x6AFF0000, 0x74FFFFFF, 0x7DFFFFFF, 0x85FFFFFF,
0x8EFFFFFF, 0x95FFFFFF, 0x96FFFFFF, 0x97FFFFFF, 0x98FFFFFF,
0x99FFFFFF, 0x9AFFFFFF, 0x9E099C1C, 0xA1099C1C, 0xA5FF99CC,
0xA7FF99CC, 0xA8FF99CC, 0xAAFF99CC, 0xAEFFFFFF, 0xB7FFFFFF,
0xBFFFFFFF, 0xD5FF99CC, 0xD6FF99CC, 0xD7FF99CC, 0xD8FF99CC,
0xD9FF99CC, 0xDAFF99CC, 0xE0FFFFFF, 0xE1FFFFFF, 0xE2FFFFFF,
0xE3FFFFFF, 0xE4FFFFFF, 0xE5FFFFFF, 0xE6FF99CC, 0xE7FF0000,
0xE8FF0000, 0xE9FF99CC, 0xEAFFFFFF, 0xEBFFFFFF, 0xECFFFFFF,
0xEDFFFFFF, 0xEEFFFFFF, 0xEFFFFFFF, 0xF0FFFFFF, 0xF1FFFFFF,
0xF2FFFFFF, 0xF3FFFFFF, 0xF4FFFFFF, 0xF5FFFFFF, 0xF6FFFFFF,
0xF7FFFFFF, 0xF8FFFFFF, 0xF9FFFFFF, 0xFAFFFFFF, 0xFBFFFFFF,
0xFCFFFFFF, 0xFDFFFFFF, 0xFEFFFFFF, 0xFFFFFFFF
};
const uint32_t frame04[] PROGMEM =
{
0x02FFFFFF, 0x0BFFFFFF, 0x14FFFFFF, 0x17FF0000, 0x18FF0000,
0x19FF0000, 0x20099C1C, 0x22099C1C, 0x25FF0000, 0x28FF0000,
0x29FF0000, 0x31FFFFFF, 0x3AFFFFFF, 0x40FFFFFF, 0x48FFFFFF,
0x51FFFFFF, 0x55FF0000, 0x56FF0000, 0x57FF0000, 0x58FF0000,
0x59FF0000, 0x5BFF0000, 0x5D099C1C, 0x62099C1C, 0x64FFFFFF,
0x66FF0000, 0x67FF0000, 0x68FF0000, 0x69FF0000, 0x6AFF0000,
0x6BFF0000, 0x82FFFFFF, 0x8BFFFFFF, 0x94FFFFFF, 0x95FFFFFF,
0x96FFFFFF, 0x97FFFFFF, 0x98FFFFFF, 0x99FFFFFF, 0x9D099C1C,
0xA2099C1C, 0xA6FF99CC, 0xA8FF99CC, 0xA9FF99CC, 0xABFF99CC,
0xB1FFFFFF, 0xBAFFFFFF, 0xC0FFFFFF, 0xC8FFFFFF, 0xD1FFFFFF,
0xD4FF99CC, 0xD5FF99CC, 0xD6FF99CC, 0xD7FF99CC, 0xD8FF99CC,
0xD9FF99CC, 0xE0FFFFFF, 0xE1FFFFFF, 0xE2FFFFFF, 0xE3FFFFFF,
0xE4FFFFFF, 0xE5FFFFFF, 0xE6FFFFFF, 0xE7FF99CC, 0xE8FF0000,
0xE9FF0000, 0xEAFF99CC, 0xEBFFFFFF, 0xECFFFFFF, 0xEDFFFFFF,
0xEEFFFFFF, 0xEFFFFFFF, 0xF0FFFFFF, 0xF1FFFFFF, 0xF2FFFFFF,
0xF3FFFFFF, 0xF4FFFFFF, 0xF5FFFFFF, 0xF6FFFFFF, 0xF7FFFFFF,
0xF8FFFFFF, 0xF9FFFFFF, 0xFAFFFFFF, 0xFBFFFFFF, 0xFCFFFFFF,
0xFDFFFFFF, 0xFEFFFFFF, 0xFFFFFFFF
};
struct frame_t
{
const uint32_t * pointer;
uint8_t size;
};
const frame_t frames[] PROGMEM =
{
{ frame00, 83 },
{ frame01, 80 },
{ frame02, 86 },
{ frame03, 84 },
{ frame04, 88 }
};
const size_t framesCount = sizeof(frames) / sizeof(frames[0]);
//---------------------------------------------------------------------------
void showFrame( uint8_t id )
{
FastLED.clear();
frame_t frame;
memcpy_P( &frame, &frames[id], sizeof(frame_t) );
for ( size_t i = 0; i < frame.size; i++ )
{
uint32_t val = pgm_read_dword( &(frame.pointer[i]) );
uint8_t pixelId = val >> 24;
CRGB pixelColor = val & 0x00FFFFFF;
leds[pixelId] = pixelColor;
}
FastLED.show();
}
void setup()
{
Serial.begin( 115200 );
FastLED.addLeds<NEOPIXEL, 10>(leds, ledsCount);
}
void loop()
{
uint32_t now = millis();
static uint32_t past = now;
if ( now - past >= 100 )
{
past = now;
static uint8_t id = 0;
showFrame( id );
if ( ++id == framesCount )
{
id = 0;
}
}
}
#else
const long Xmas001[] PROGMEM = {
0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FFFFFF, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF99CC, 0x00FF0000, 0x00FF0000, 0x00FF99CC, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, // 1
};
const long Xmas002[] PROGMEM = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF99CC, 0x00FF0000, 0x00FF0000, 0x00FF99CC, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, // 2
};
const long Xmas003[] PROGMEM = {
0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00FF0000, 0x00000000, 0x00099C1C, 0x00099C1C, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00099C1C, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF99CC, 0x00FF0000, 0x00FF0000, 0x00FF99CC, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, // 3
};
const long Xmas004[] PROGMEM = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00FF0000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF99CC, 0x00FF0000, 0x00FF0000, 0x00FF99CC, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, // 4
};
const long Xmas005[] PROGMEM = {
0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00FF0000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00FF0000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00099C1C, 0x00000000, 0x00000000, 0x00000000, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00FF99CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF99CC, 0x00FF0000, 0x00FF0000, 0x00FF99CC, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, // 5
};
const long * frames[] =
{
Xmas001, Xmas002, Xmas003, Xmas004, Xmas005
};
class ArrayFormatter
{
public :
void start( const char * text, const size_t maxValuesPerLine = 10, const bool jumpLine = false )
{
if ( m_started )
{
return;
}
m_started = true;
m_maxValuesPerLine = maxValuesPerLine;
m_counter = 0;
m_jumpLine = jumpLine;
if ( sm_level == 0 )
{
Serial.print( text );
Serial.print( " =\n" );
}
else
{
Serial.print( "// " );
Serial.print( text );
Serial.print( '\n' );
for ( uint8_t i = 0; i < sm_level; i++ )
{
Serial.print( '\t' );
}
}
Serial.print( "{\n" );
sm_level++;
}
void add( const char * value )
{
if ( add() )
{
Serial.print( value );
}
}
bool add()
{
if ( !m_started )
{
return false;
}
if ( m_counter == 0 )
{
for ( uint8_t i = 0; i < sm_level; i++ )
{
Serial.print( '\t' );
}
}
else
{
if ( m_counter < m_maxValuesPerLine )
{
Serial.print( ", " );
}
else
{
m_counter = 0;
Serial.print( ",\n" );
if ( m_jumpLine )
{
Serial.print( '\n' );
}
for ( uint8_t i = 0; i < sm_level; i++ )
{
Serial.print( '\t' );
}
}
}
m_counter++;
return true;
}
void end()
{
if ( !m_started )
{
return;
}
m_started = false;
m_counter = 0;
sm_level--;
Serial.print( '\n' );
if ( sm_level == 0 )
{
Serial.print( "};\n" );
}
else
{
for ( uint8_t i = 0; i < sm_level; i++ )
{
Serial.print( '\t' );
}
Serial.print( '}' );
}
}
private :
static uint8_t sm_level;
bool m_started = false;
size_t m_maxValuesPerLine = 10;
size_t m_counter = 0;
bool m_jumpLine = false;
};
uint8_t ArrayFormatter::sm_level = 0;
void printArrays()
{
ArrayFormatter af;
char str[40];
uint8_t framesCount = sizeof(frames) / sizeof(frames[0]);
Serial.print( "//---------------------------------------------------------------------------\n\n" );
// frames
for ( size_t i = 0; i < framesCount; i++ )
{
snprintf( str, sizeof( str ), "const uint32_t frame%02d[] PROGMEM", i );
af.start( str, 5 );
for ( size_t j = 0; j < 256; j++ )
{
uint32_t val = pgm_read_dword( &(frames[i][j]) );
if ( val != 0 )
{
snprintf( str, sizeof( str ), "0x%08lX", val | ((uint32_t)j << 24) );
af.add( str );
}
}
af.end();
Serial.println();
}
// structs
Serial.print( "struct frame_t\n{\n\tconst uint32_t * pointer;\n\tuint8_t size;\n};\n\n" );
af.start( "const frame_t frames[] PROGMEM", 1 );
for ( size_t i = 0; i < framesCount; i++ )
{
uint8_t counter = 0;
for ( size_t j = 0; j < 256; j++ )
{
if ( pgm_read_dword( &(frames[i][j]) ) != 0 )
{
counter++;
}
}
snprintf( str, sizeof( str ), "{ frame%02d, %3hhu }", i, counter );
af.add( str );
}
af.end();
Serial.print( "\nconst size_t framesCount = sizeof(frames) / sizeof(frames[0]);\n\n" );
Serial.print( "//---------------------------------------------------------------------------\n\n" );
}
void setup()
{
Serial.begin( 115200 );
printArrays();
}
void loop()
{
}
#endif