//#define FASTLED_ESP8266_NODEMCU_PIN_ORDER //Uncomment for ESP-12E Boards
#include "FastLED.h"
#define NUM_LEDS 200
#define DATA_PIN 22
#define BRIGHTNESS 255
CRGB leds[NUM_LEDS];
byte mainarray[8][25][3];
byte a8x25[8][25][3];
int DELAY;
void setup() {
delay(2000);
FastLED.setBrightness( BRIGHTNESS );
DELAY = 110;
FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop()
{
//In step by step designs, say the function as abc(x,y); [x - DELAY, y - Repeats]
//In array functions, after mentioning the function, put pt8x25(z, x); [z - direction as 0 - up, 1 - down, 2 - left, 3 - right]
test_2();
pt8x25(2, DELAY);
shiftsteps8x25(0, DELAY, 8);
test_1();
pt8x25(0, DELAY);
shiftsteps8x25(0, DELAY, 8);
// for (int u = 0; u < 2; u++) {
// test_1();
// pt8x25(0, DELAY);
// }
}
void test_2() {
cleara8x25();
a8x25[0][0][0] = 255;
a8x25[1][0][0] = 255;
a8x25[2][0][0] = 255;
a8x25[3][0][0] = 255;
a8x25[4][0][0] = 255;
a8x25[5][0][0] = 255;
a8x25[6][0][0] = 255;
a8x25[7][0][0] = 255;
}
void test_1() {
cleara8x25();
a8x25[0][0][0] = 255;
a8x25[0][0][1] = 165;
a8x25[1][0][0] = 255;
a8x25[1][0][1] = 165;
a8x25[2][0][2] = 255;
a8x25[3][0][2] = 255;
a8x25[4][0][0] = 255;
a8x25[4][0][1] = 255;
a8x25[5][0][0] = 255;
a8x25[5][0][1] = 255;
a8x25[6][0][0] = 255;
a8x25[7][0][0] = 255;
a8x25[0][2][2] = 255;
a8x25[1][2][2] = 255;
a8x25[2][2][0] = 255;
a8x25[2][2][1] = 255;
a8x25[3][2][0] = 255;
a8x25[3][2][1] = 255;
a8x25[4][2][0] = 255;
a8x25[5][2][0] = 255;
a8x25[6][2][0] = 255;
a8x25[6][2][1] = 255;
a8x25[6][2][2] = 255;
a8x25[7][2][0] = 255;
a8x25[7][2][1] = 255;
a8x25[7][2][2] = 255;
a8x25[0][4][0] = 255;
a8x25[0][4][1] = 255;
a8x25[1][4][0] = 255;
a8x25[1][4][1] = 255;
a8x25[2][4][0] = 255;
a8x25[3][4][0] = 255;
a8x25[4][4][0] = 255;
a8x25[4][4][1] = 255;
a8x25[4][4][2] = 255;
a8x25[5][4][0] = 255;
a8x25[5][4][1] = 255;
a8x25[5][4][2] = 255;
a8x25[6][4][0] = 255;
a8x25[6][4][1] = 165;
a8x25[7][4][0] = 255;
a8x25[7][4][1] = 165;
a8x25[0][6][0] = 255;
a8x25[1][6][0] = 255;
a8x25[2][6][0] = 255;
a8x25[2][6][1] = 255;
a8x25[2][6][2] = 255;
a8x25[3][6][0] = 255;
a8x25[3][6][1] = 255;
a8x25[3][6][2] = 255;
a8x25[4][6][0] = 255;
a8x25[4][6][1] = 165;
a8x25[5][6][0] = 255;
a8x25[5][6][1] = 165;
a8x25[6][6][2] = 255;
a8x25[7][6][2] = 255;
a8x25[0][8][0] = 255;
a8x25[0][8][1] = 255;
a8x25[0][8][2] = 255;
a8x25[1][8][0] = 255;
a8x25[1][8][1] = 255;
a8x25[1][8][2] = 255;
a8x25[2][8][0] = 255;
a8x25[2][8][1] = 165;
a8x25[3][8][0] = 255;
a8x25[3][8][1] = 165;
a8x25[4][8][2] = 255;
a8x25[5][8][2] = 255;
a8x25[6][8][0] = 255;
a8x25[6][8][1] = 255;
a8x25[7][8][0] = 255;
a8x25[7][8][1] = 255;
a8x25[0][10][0] = 255;
a8x25[0][10][1] = 165;
a8x25[1][10][0] = 255;
a8x25[1][10][1] = 165;
a8x25[2][10][2] = 255;
a8x25[3][10][2] = 255;
a8x25[4][10][0] = 255;
a8x25[4][10][1] = 255;
a8x25[5][10][0] = 255;
a8x25[5][10][1] = 255;
a8x25[6][10][0] = 255;
a8x25[7][10][0] = 255;
a8x25[0][12][2] = 255;
a8x25[1][12][2] = 255;
a8x25[2][12][0] = 255;
a8x25[2][12][1] = 255;
a8x25[3][12][0] = 255;
a8x25[3][12][1] = 255;
a8x25[4][12][0] = 255;
a8x25[5][12][0] = 255;
a8x25[6][12][0] = 255;
a8x25[6][12][1] = 255;
a8x25[6][12][2] = 255;
a8x25[7][12][0] = 255;
a8x25[7][12][1] = 255;
a8x25[7][12][2] = 255;
a8x25[0][14][0] = 255;
a8x25[0][14][1] = 165;
a8x25[1][14][0] = 255;
a8x25[1][14][1] = 165;
a8x25[2][14][2] = 255;
a8x25[3][14][2] = 255;
a8x25[4][14][0] = 255;
a8x25[4][14][1] = 255;
a8x25[5][14][0] = 255;
a8x25[5][14][1] = 255;
a8x25[6][14][0] = 255;
a8x25[7][14][0] = 255;
a8x25[0][16][0] = 255;
a8x25[0][16][1] = 255;
a8x25[0][16][2] = 255;
a8x25[1][16][0] = 255;
a8x25[1][16][1] = 255;
a8x25[1][16][2] = 255;
a8x25[2][16][0] = 255;
a8x25[2][16][1] = 165;
a8x25[3][16][0] = 255;
a8x25[3][16][1] = 165;
a8x25[4][16][2] = 255;
a8x25[5][16][2] = 255;
a8x25[6][16][0] = 255;
a8x25[6][16][1] = 255;
a8x25[7][16][0] = 255;
a8x25[7][16][1] = 255;
a8x25[0][18][0] = 255;
a8x25[1][18][0] = 255;
a8x25[2][18][0] = 255;
a8x25[2][18][1] = 255;
a8x25[2][18][2] = 255;
a8x25[3][18][0] = 255;
a8x25[3][18][1] = 255;
a8x25[3][18][2] = 255;
a8x25[4][18][0] = 255;
a8x25[4][18][1] = 165;
a8x25[5][18][0] = 255;
a8x25[5][18][1] = 165;
a8x25[6][18][2] = 255;
a8x25[7][18][2] = 255;
a8x25[0][20][0] = 255;
a8x25[0][20][1] = 255;
a8x25[1][20][0] = 255;
a8x25[1][20][1] = 255;
a8x25[2][20][0] = 255;
a8x25[3][20][0] = 255;
a8x25[4][20][0] = 255;
a8x25[4][20][1] = 255;
a8x25[4][20][2] = 255;
a8x25[5][20][0] = 255;
a8x25[5][20][1] = 255;
a8x25[5][20][2] = 255;
a8x25[6][20][0] = 255;
a8x25[6][20][1] = 165;
a8x25[7][20][0] = 255;
a8x25[7][20][1] = 165;
a8x25[0][22][2] = 255;
a8x25[1][22][2] = 255;
a8x25[2][22][0] = 255;
a8x25[2][22][1] = 255;
a8x25[3][22][0] = 255;
a8x25[3][22][1] = 255;
a8x25[4][22][0] = 255;
a8x25[5][22][0] = 255;
a8x25[6][22][0] = 255;
a8x25[6][22][1] = 255;
a8x25[6][22][2] = 255;
a8x25[7][22][0] = 255;
a8x25[7][22][1] = 255;
a8x25[7][22][2] = 255;
a8x25[0][24][0] = 255;
a8x25[0][24][1] = 165;
a8x25[1][24][0] = 255;
a8x25[1][24][1] = 165;
a8x25[2][24][2] = 255;
a8x25[3][24][2] = 255;
a8x25[4][24][0] = 255;
a8x25[4][24][1] = 255;
a8x25[5][24][0] = 255;
a8x25[5][24][1] = 255;
a8x25[6][24][0] = 255;
a8x25[7][24][0] = 255;
a8x25[0][1][0] = 255;
a8x25[0][1][1] = 165;
a8x25[1][1][2] = 255;
a8x25[2][1][2] = 255;
a8x25[3][1][0] = 255;
a8x25[3][1][1] = 255;
a8x25[4][1][0] = 255;
a8x25[4][1][1] = 255;
a8x25[5][1][0] = 255;
a8x25[6][1][0] = 255;
a8x25[7][1][0] = 255;
a8x25[7][1][1] = 255;
a8x25[7][1][2] = 255;
a8x25[0][3][2] = 255;
a8x25[1][3][0] = 255;
a8x25[1][3][1] = 255;
a8x25[2][3][0] = 255;
a8x25[2][3][1] = 255;
a8x25[3][3][0] = 255;
a8x25[4][3][0] = 255;
a8x25[5][3][0] = 255;
a8x25[5][3][1] = 255;
a8x25[5][3][2] = 255;
a8x25[6][3][0] = 255;
a8x25[6][3][1] = 255;
a8x25[6][3][2] = 255;
a8x25[7][3][0] = 255;
a8x25[7][3][1] = 165;
a8x25[0][5][0] = 255;
a8x25[0][5][1] = 255;
a8x25[1][5][0] = 255;
a8x25[2][5][0] = 255;
a8x25[3][5][0] = 255;
a8x25[3][5][1] = 255;
a8x25[3][5][2] = 255;
a8x25[4][5][0] = 255;
a8x25[4][5][1] = 255;
a8x25[4][5][2] = 255;
a8x25[5][5][0] = 255;
a8x25[5][5][1] = 165;
a8x25[6][5][0] = 255;
a8x25[6][5][1] = 165;
a8x25[7][5][2] = 255;
a8x25[0][7][0] = 255;
a8x25[1][7][0] = 255;
a8x25[1][7][1] = 255;
a8x25[1][7][2] = 255;
a8x25[2][7][0] = 255;
a8x25[2][7][1] = 255;
a8x25[2][7][2] = 255;
a8x25[3][7][0] = 255;
a8x25[3][7][1] = 165;
a8x25[4][7][0] = 255;
a8x25[4][7][1] = 165;
a8x25[5][7][2] = 255;
a8x25[6][7][2] = 255;
a8x25[7][7][0] = 255;
a8x25[7][7][1] = 255;
a8x25[0][9][0] = 255;
a8x25[0][9][1] = 255;
a8x25[0][9][2] = 255;
a8x25[1][9][0] = 255;
a8x25[1][9][1] = 165;
a8x25[2][9][0] = 255;
a8x25[2][9][1] = 165;
a8x25[3][9][2] = 255;
a8x25[4][9][2] = 255;
a8x25[5][9][0] = 255;
a8x25[5][9][1] = 255;
a8x25[6][9][0] = 255;
a8x25[6][9][1] = 255;
a8x25[7][9][0] = 255;
a8x25[0][11][0] = 255;
a8x25[0][11][1] = 165;
a8x25[1][11][2] = 255;
a8x25[2][11][2] = 255;
a8x25[3][11][0] = 255;
a8x25[3][11][1] = 255;
a8x25[4][11][0] = 255;
a8x25[4][11][1] = 255;
a8x25[5][11][0] = 255;
a8x25[6][11][0] = 255;
a8x25[7][11][0] = 255;
a8x25[7][11][1] = 255;
a8x25[7][11][2] = 255;
a8x25[0][13][0] = 255;
a8x25[0][13][1] = 165;
a8x25[1][13][2] = 255;
a8x25[2][13][2] = 255;
a8x25[3][13][0] = 255;
a8x25[3][13][1] = 255;
a8x25[4][13][0] = 255;
a8x25[4][13][1] = 255;
a8x25[5][13][0] = 255;
a8x25[6][13][0] = 255;
a8x25[7][13][0] = 255;
a8x25[7][13][1] = 255;
a8x25[7][13][2] = 255;
a8x25[0][15][0] = 255;
a8x25[0][15][1] = 255;
a8x25[0][15][2] = 255;
a8x25[1][15][0] = 255;
a8x25[1][15][1] = 165;
a8x25[2][15][0] = 255;
a8x25[2][15][1] = 165;
a8x25[3][15][2] = 255;
a8x25[4][15][2] = 255;
a8x25[5][15][0] = 255;
a8x25[5][15][1] = 255;
a8x25[6][15][0] = 255;
a8x25[6][15][1] = 255;
a8x25[7][15][0] = 255;
a8x25[0][17][0] = 255;
a8x25[1][17][0] = 255;
a8x25[1][17][1] = 255;
a8x25[1][17][2] = 255;
a8x25[2][17][0] = 255;
a8x25[2][17][1] = 255;
a8x25[2][17][2] = 255;
a8x25[3][17][0] = 255;
a8x25[3][17][1] = 165;
a8x25[4][17][0] = 255;
a8x25[4][17][1] = 165;
a8x25[5][17][2] = 255;
a8x25[6][17][2] = 255;
a8x25[7][17][0] = 255;
a8x25[7][17][1] = 255;
a8x25[0][19][0] = 255;
a8x25[0][19][1] = 255;
a8x25[1][19][0] = 255;
a8x25[2][19][0] = 255;
a8x25[3][19][0] = 255;
a8x25[3][19][1] = 255;
a8x25[3][19][2] = 255;
a8x25[4][19][0] = 255;
a8x25[4][19][1] = 255;
a8x25[4][19][2] = 255;
a8x25[5][19][0] = 255;
a8x25[5][19][1] = 165;
a8x25[6][19][0] = 255;
a8x25[6][19][1] = 165;
a8x25[7][19][2] = 255;
a8x25[0][21][2] = 255;
a8x25[1][21][0] = 255;
a8x25[1][21][1] = 255;
a8x25[2][21][0] = 255;
a8x25[2][21][1] = 255;
a8x25[3][21][0] = 255;
a8x25[4][21][0] = 255;
a8x25[5][21][0] = 255;
a8x25[5][21][1] = 255;
a8x25[5][21][2] = 255;
a8x25[6][21][0] = 255;
a8x25[6][21][1] = 255;
a8x25[6][21][2] = 255;
a8x25[7][21][0] = 255;
a8x25[7][21][1] = 165;
a8x25[0][23][0] = 255;
a8x25[0][23][1] = 165;
a8x25[1][23][2] = 255;
a8x25[2][23][2] = 255;
a8x25[3][23][0] = 255;
a8x25[3][23][1] = 255;
a8x25[4][23][0] = 255;
a8x25[4][23][1] = 255;
a8x25[5][23][0] = 255;
a8x25[6][23][0] = 255;
a8x25[7][23][0] = 255;
a8x25[7][23][1] = 255;
a8x25[7][23][2] = 255;
}
void clearmainarray() {
for (byte z1 = 0; z1 < 8; z1++) {
for (byte z2 = 0; z2 < 25; z2++) {
for (byte z3 = 0; z3 < 3; z3++) {
mainarray[z1][z2][z3] = 0;
}
}
}
}
void cleara8x25() {
for (byte z1 = 0; z1 < 8; z1++) {
for (byte z2 = 0; z2 < 25; z2++) {
for (byte z3 = 0; z3 < 3; z3++) {
a8x25[z1][z2][z3] = 0;
}
}
}
}
void display() {
for (byte qq = 0; qq < 25; qq++) {
if (qq % 2 == 0) {
for (byte q = 0; q < 8; q++) {
leds[q + (qq * 8)] = CRGB(mainarray[q][qq][0], mainarray[q][qq][1], mainarray[q][qq][2]);
}
}
else {
for (byte q = 0; q < 8; q++) {
leds[q + (qq * 8)] = CRGB(mainarray[7 - q][qq][0], mainarray[7 - q][qq][1], mainarray[7 - q][qq][2]);
}
}
}
FastLED.show();
}
void up() {
for (byte i = 0; i < 7; i++) {
for (byte j = 0; j < 25; j++) {
mainarray[i][j][0] = mainarray[i + 1][j][0];
mainarray[i][j][1] = mainarray[i + 1][j][1];
mainarray[i][j][2] = mainarray[i + 1][j][2];
}
}
}
void down() {
for (byte i = 7; i > 0; i++) {
for (byte j = 0; j < 25; j++) {
mainarray[i][j][0] = mainarray[i - 1][j][0];
mainarray[i][j][1] = mainarray[i - 1][j][1];
mainarray[i][j][2] = mainarray[i - 1][j][2];
}
}
}
void moveleft() {
for (byte j = 0; j < 24; j++) {
for (byte i = 0; i < 8; i++) {
mainarray[i][j][0] = mainarray[i][j + 1][0];
mainarray[i][j][1] = mainarray[i][j + 1][1];
mainarray[i][j][2] = mainarray[i][j + 1][2];
}
}
}
void moveright() {
for (byte j = 24; j > 0; j--) {
for (byte i = 0; i < 8; i++) {
mainarray[i][j][0] = mainarray[i][j - 1][0];
mainarray[i][j][1] = mainarray[i][j - 1][1];
mainarray[i][j][2] = mainarray[i][j - 1][2];
}
}
}
void setbottomrow(byte x) {
for (byte i = 0; i < 25; i++) {
mainarray[7][i][0] = a8x25[x][i][0];
mainarray[7][i][1] = a8x25[x][i][1];
mainarray[7][i][2] = a8x25[x][i][2];
}
}
void settoprow(byte x) {
for (byte i = 0; i < 25; i++) {
mainarray[0][i][0] = a8x25[7 - x][i][0];
mainarray[0][i][1] = a8x25[7 - x][i][1];
mainarray[0][i][2] = a8x25[7 - x][i][2];
}
}
void setleftcolumn(byte x) {
for (byte i = 0; i < 8; i++) {
mainarray[i][0][0] = a8x25[i][24 - x][0];
mainarray[i][0][1] = a8x25[i][24 - x][1];
mainarray[i][0][2] = a8x25[i][24 - x][2];
}
}
void setrightcolumn(byte x) {
for (byte i = 0; i < 8; i++) {
mainarray[i][24][0] = a8x25[i][x][0];
mainarray[i][24][1] = a8x25[i][x][1];
mainarray[i][24][2] = a8x25[i][x][2];
}
}
void pt8x25(int d, int sp) {
if (d == 0) {
for (byte hh = 0; hh < 8; hh++) {
setbottomrow(hh);
display();
delay(sp);
up();
}
}
if (d == 1) {
for (byte hh = 0; hh < 8; hh++) {
settoprow(hh);
display();
delay(sp);
down();
}
}
else if (d == 2) {
for (byte hh = 0; hh < 25; hh++) {
setrightcolumn(hh);
display();
delay(sp);
moveleft();
}
}
else if (d == 3) {
for (byte hh = 0; hh < 25; hh++) {
setleftcolumn(hh);
display();
delay(sp);
moveright();
}
}
}
void shiftsteps8x25(int d, int sp, byte steps) {
if (d == 0) {
for (byte i = 0 ; i < 25; i++) {
mainarray[7][i][0] = 0;
mainarray[7][i][1] = 0;
mainarray[7][i][2] = 0;
}
for (byte hh = 0; hh < steps; hh++) {
display();
delay(sp);
up();
}
}
if (d == 1) {
for (byte i = 0 ; i < 25; i++) {
mainarray[0][i][0] = 0;
mainarray[0][i][1] = 0;
mainarray[0][i][2] = 0;
}
for (byte hh = 0; hh < steps; hh++) {
display();
delay(sp);
down();
}
}
else if (d == 2) {
for (byte i = 0; i < 8; i++) {
mainarray[i][24][0] = 0;
mainarray[i][24][1] = 0;
mainarray[i][24][2] = 0;
}
for (byte hh = 0; hh < steps; hh++) {
display();
delay(sp);
moveleft();
}
}
else if (d == 3) {
for (byte i = 0 ; i < 8; i++) {
mainarray[i][0][0] = 0;
mainarray[i][0][1] = 0;
mainarray[i][0][2] = 0;
}
for (byte hh = 0; hh < steps; hh++) {
display();
delay(sp);
moveright();
}
}
}