#include <FastLED.h>
#include <avr/pgmspace.h>
// =============== CONFIGURATION ===============
#define LED_PIN 3
#define COLOR_ORDER GRB
#define CHIPSET WS2811
#define BRIGHTNESS 255
// Matrix dimensions
const uint8_t kMatrixWidth = 16;
const uint8_t kMatrixHeight = 16;
#define NUM_LEDS (kMatrixWidth * kMatrixHeight)
// Animation speed
int sp = 50; // speed
// =============== GLOBAL VARIABLES ===============
CRGB leds[NUM_LEDS];
CRGB A[kMatrixWidth][kMatrixHeight]; // Keep original variable name
// =============== PATTERN DATA (FROM YOUR CODE) ===============
const uint32_t ledarray01[] PROGMEM = {
0x00FF00FF, 0x00FFFFFF, 0x00FFFFFF, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000,
0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF,
0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x000000FF, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
0x0000FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00,
};
const uint32_t ledarray0[] PROGMEM = {
0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF,
0x00FFFFFF, 0x00FFFFFF, 0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF, 0x00FFFFFF, 0x00000080,
0x00000080, 0x00000080, 0x00FFFFFF, 0x00FFFFFF, 0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000,
0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF, 0x00FFFFFF, 0x00000080, 0x00000080, 0x00B0B000,
0x00B0B000, 0x00B0B000, 0x00000080, 0x00000080, 0x00FFFFFF, 0x00FFFFFF, 0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF,
0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF, 0x00FFFFFF, 0x00000080, 0x00000080, 0x00B0B000,
0x00000080, 0x00000080, 0x00FFFFFF, 0x00FFFFFF, 0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF, 0x00FFFFFF, 0x00000080,
0x00FFFFFF, 0x00FFFFFF, 0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF, 0x00FF00FF, 0x00FFFFFF,
0x00FF00FF, 0x00FF00FF, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FF0000, 0x00FF0000, 0x000000FF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x000000FF, 0x00FF0000, 0x00FF0000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x00FF00FF,
};
const uint32_t ledarray1[] PROGMEM = {
0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00,
0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00, 0x00FF00FF,
0x00FFFF00, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x0000FF40, 0x00FFFF00,
};
const uint32_t ledarray3[] PROGMEM = {
0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FF00FF,
0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FFFF00, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00,
0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF00,
0x00FFFF00, 0x00FFFF44, 0x00FFFF44, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00,
0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FFFF00,
0x0000FF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00,
0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FFFF00, 0x0000FF00, 0x0000FF00,
0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00,
0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00,
0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000, 0x00FF0000, 0x00FF0000,
0x00FF0000, 0x00FF0000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000,
0x00FF0000, 0x00FF0000, 0x00FF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF0000,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FFFF44, 0x00FFFF44, 0x00FFFF44, 0x00FFFF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x0000FF00, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000,
};
const uint32_t ledarray4[] PROGMEM = {
0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF44, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF00, 0x00FFFF44, 0x00FFFF00, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00FFFF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF00, 0x00FFFF00, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00FF00FF,
0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000, 0x0000FF00, 0x00FFFF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FF00, 0x00000000, 0x00000000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
const uint32_t ledarray5[] PROGMEM = {
0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000,
0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000,
0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000,
0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000,
0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000,
0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FFFF44, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x00000000,
};
// =============== FUNCTION PROTOTYPES ===============
void ReadArray(const uint32_t* Led_Array);
void SetMatrix();
void SetMatrixR();
void MoveLeft_1();
void MoveRight_1();
void MoveDown_1();
void MoveUp_1();
void MoveLeft(int T);
void MoveRight(int T);
void MoveUp(int T);
void MoveDown(int T);
// =============== ARDUINO SETUP & LOOP ===============
void setup() {
FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
FastLED.show();
}
void loop() {
// Your original animation sequence
ReadArray(ledarray0);
FastLED.show();
delay(sp);
MoveRight(3);
delay(500);
MoveLeft(3);
delay(500);
ReadArray(ledarray1);
FastLED.show();
delay(sp);
MoveRight(3);
delay(500);
MoveLeft(3);
delay(500);
ReadArray(ledarray3);
FastLED.show();
delay(sp);
MoveRight(3);
delay(500);
MoveLeft(3);
delay(500);
ReadArray(ledarray4);
FastLED.show();
delay(sp);
MoveRight(3);
delay(500);
MoveLeft(3);
delay(500);
ReadArray(ledarray5);
FastLED.show();
delay(sp);
MoveRight(3);
delay(500);
MoveLeft(3);
delay(500);
}
// =============== MATRIX FUNCTIONS ===============
/**
* Load pattern from PROGMEM into matrix A
* @param Led_Array Pointer to pattern array in PROGMEM
*/
void ReadArray(const uint32_t* Led_Array) {
FastLED.clear();
int index = 0;
for (int i = 0; i < kMatrixWidth; i++) {
for (int j = 0; j < kMatrixHeight; j++) {
A[i][j] = pgm_read_dword(&(Led_Array[index]));
index++;
}
}
SetMatrix();
}
/**
* Copy matrix A to LED array in normal order
*/
void SetMatrix() {
int index = 0;
for (int i = 0; i < kMatrixWidth; i++) {
for (int j = 0; j < kMatrixHeight; j++) {
leds[index] = A[i][j];
index++;
}
}
}
/**
* Copy matrix A to LED array in reverse order (for zig-zag effect)
*/
void SetMatrixR() {
int index = 0;
for (int i = 0; i < kMatrixWidth; i++) {
for (int j = kMatrixHeight; j > 0; j--) {
leds[index] = A[i][j - 1];
index++;
}
}
}
/**
* Shift all columns left by one position
*/
void MoveLeft_1() {
for (int j = 0; j < kMatrixHeight; j++) {
CRGB temp = A[0][j];
for (int i = 0; i < kMatrixWidth - 1; i++) {
A[i][j] = A[i + 1][j];
}
A[kMatrixWidth - 1][j] = temp;
}
}
/**
* Shift all columns right by one position
*/
void MoveRight_1() {
for (int j = 0; j < kMatrixHeight; j++) {
CRGB temp = A[kMatrixWidth - 1][j];
for (int i = kMatrixWidth - 1; i > 0; i--) {
A[i][j] = A[i - 1][j];
}
A[0][j] = temp;
}
}
/**
* Shift all rows down by one position (with zig-zag handling)
*/
void MoveDown_1() {
for (int i = 0; i < kMatrixWidth; i++) {
if (i % 2 == 0) {
// Even rows: shift down
CRGB temp = A[i][0];
for (int j = 0; j < kMatrixHeight - 1; j++) {
A[i][j] = A[i][j + 1];
}
A[i][kMatrixHeight - 1] = temp;
} else {
// Odd rows: shift up (compensates for zig-zag wiring)
CRGB temp = A[i][kMatrixHeight - 1];
for (int j = kMatrixHeight - 1; j > 0; j--) {
A[i][j] = A[i][j - 1];
}
A[i][0] = temp;
}
}
}
/**
* Shift all rows up by one position (with zig-zag handling)
*/
void MoveUp_1() {
for (int i = 0; i < kMatrixWidth; i++) {
if (i % 2 == 0) {
// Even rows: shift up
CRGB temp = A[i][kMatrixHeight - 1];
for (int j = kMatrixHeight - 1; j > 0; j--) {
A[i][j] = A[i][j - 1];
}
A[i][0] = temp;
} else {
// Odd rows: shift down (compensates for zig-zag wiring)
CRGB temp = A[i][0];
for (int j = 0; j < kMatrixHeight - 1; j++) {
A[i][j] = A[i][j + 1];
}
A[i][kMatrixHeight - 1] = temp;
}
}
}
// =============== COMPLEX ANIMATIONS ===============
/**
* Animate left movement with visual effect
* @param T Number of complete animation cycles
*/
void MoveLeft(int T) {
for (int ii = 0; ii < T; ii++) {
for (int i = 0; i < kMatrixWidth / 2; i++) {
MoveLeft_1();
SetMatrixR();
FastLED.show();
delay(sp);
MoveLeft_1();
SetMatrix();
FastLED.show();
delay(sp);
}
}
}
/**
* Animate right movement with visual effect
* @param T Number of complete animation cycles
*/
void MoveRight(int T) {
FastLED.show();
delay(sp);
for (int ii = 0; ii < T; ii++) {
for (int i = 0; i < kMatrixWidth / 2; i++) {
MoveRight_1();
SetMatrixR();
FastLED.show();
delay(sp);
MoveRight_1();
SetMatrix();
FastLED.show();
delay(sp);
}
}
}
/**
* Animate upward movement
* @param T Number of complete shifts
*/
void MoveUp(int T) {
for (int ii = 0; ii < T; ii++) {
for (int i = 0; i < kMatrixHeight; i++) {
MoveUp_1();
SetMatrix();
FastLED.show();
delay(sp);
}
}
}
/**
* Animate downward movement
* @param T Number of complete shifts
*/
void MoveDown(int T) {
for (int ii = 0; ii < T; ii++) {
for (int i = 0; i < kMatrixHeight; i++) {
MoveDown_1();
SetMatrix();
FastLED.show();
delay(sp);
}
}
}
// =============== UTILITY FUNCTIONS ===============
/**
* Display a color test pattern
*/
void colorTest() {
FastLED.clear();
// Red
for (int i = 0; i < NUM_LEDS / 4; i++) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(1000);
// Green
for (int i = NUM_LEDS / 4; i < NUM_LEDS / 2; i++) {
leds[i] = CRGB::Green;
}
FastLED.show();
delay(1000);
// Blue
for (int i = NUM_LEDS / 2; i < 3 * NUM_LEDS / 4; i++) {
leds[i] = CRGB::Blue;
}
FastLED.show();
delay(1000);
// White
for (int i = 3 * NUM_LEDS / 4; i < NUM_LEDS; i++) {
leds[i] = CRGB::White;
}
FastLED.show();
delay(1000);
FastLED.clear();
FastLED.show();
}
/**
* Simple rainbow animation
*/
void rainbowAnimation(int cycles) {
for (int cycle = 0; cycle < cycles; cycle++) {
for (int hue = 0; hue < 256; hue++) {
fill_rainbow(leds, NUM_LEDS, hue, 7);
FastLED.show();
delay(20);
}
}
}