// --> include libraries
#include <FastLED.h>
// --> defines and constants and global variables
#define NUM_LEDS 385 // number of LEDS
CRGB leds[NUM_LEDS]; // Define led strip
int brightness = 250; // LED brightness
int NS[] = {-8, 8}; // North South Directions
int EW[] = {-1, 1}; // East West Directions
int NESW[] = {-8, 1, 8, -1}; // all directions to pick starting directions
int dc; // direction check - universal
int wd; // worm direction - universal
int c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12; // Colour
int w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12; // worm A/B LED
int w1m, w2m, w3m, w4m, w5m, w6m, w7m, w8m, w9m, w10m, w11m, w12m = 1; // worm movement counter
int w1t, w2t, w3t, w4t, w5t, w6t; // worm A/B Travel before turning
int w1d, w2d, w3d, w4d, w5d, w6d, w7d, w8d, w9d, w10d, w11d, w12d; // worm A/B direction
int c; // Colour
int cm;
int rd; // Direction select
int d; // Direction
// --> user defined functions
void FADE();
void directioncheck();
// --> setup
void setup()
{
FastLED.addLeds<NEOPIXEL, 4>(leds, 0, 64);
FastLED.addLeds<NEOPIXEL, 3>(leds, 64, 320);
FastLED.addLeds<NEOPIXEL, 2>(leds, 320, 384);
//FastLED.addLeds<WS2812, 3, RGB>(leds, NUM_LEDS);
//FastLED.addLeds<WS2812,DATA_PINr2,RGB>(ledsr2,NUM_LEDSr2);
randomSeed(analogRead(0));
c1 = c2 = c3 = c4 = c5 = 200; //random(256); // randomize the starting colour
w1 = w2 = w3 = w4 = w5 = random(384); // set random starting point
w1 = 0;
w2 = 63;
w3 = 320;
w4 = 383;
w5 = 64;
w6 = 127;
w7 = 192;
w8 = 255;
w9 = 128;
w10 = 191;
w11 = 256;
w12 = 319;
rd = random(4); // random pick number
d = (NESW[rd]); // use random number to pick direct
//w1d = w2d = w3d = w4d = w5d = (NESW[rd]); // set directions of worms
w1d = 1;
w2d = -1;
w3d = 1;
w4d = -1;
w5d = 8;
w6d = -8;
w7d = 8;
w8d = -8;
w9d = 1;
w10d = -1;
w11d = 1;
w12d = -1;
w1t = 16; // worm A Travel pick random distance
w2t = 32; // worm B Travel pick random distance
w3t = 48; // worm B Travel pick random distance
w4t = 52; // worm B Travel pick random distance
w5t = 68; // worm B Travel pick random distance
w6t = 68; // worm B Travel pick random distance
cm = 18;//34;
}
// --> loop
void loop()
{
for (int m = 1; m < 15; m++)
{
for (int t = 1; t < cm; t++) //1
{
Worm01(); Worm02(); Worm03(); Worm04();
Worm05(); Worm06(); Worm07(); Worm08();
Worm09(); Worm10(); Worm11(); Worm12();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
//delay(100);
directionchangeA();
}
for (int t = 1; t < cm; t++) //1
{
Worm01(); Worm02(); Worm03(); Worm04();
Worm05(); Worm06(); Worm07(); Worm08();
Worm09(); Worm10(); Worm11(); Worm12();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
//delay(100);
for (int m = 1; m < 15; m++)
{
for (int t = 1; t < cm; t++) //1
{
Worm01(); Worm02(); Worm03(); Worm04();
Worm05(); Worm06(); Worm07(); Worm08();
Worm09(); Worm10(); Worm11(); Worm12();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
//delay(100);
directionchangeB();
}
for (int t = 1; t < cm; t++) //1
{
Worm01(); Worm02(); Worm03(); Worm04();
Worm05(); Worm06(); Worm07(); Worm08();
Worm09(); Worm10(); Worm11(); Worm12();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
//delay(100);
//Worm01();
/*
for (int t = 1; t < 67; t++)
{
Worm01();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
directionchange();
for (int t = 1; t < 62; t++)
{
Worm01();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
directionchange();
for (int t = 1; t < 64; t++)
{
Worm01();
FastLED.show();
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} delay(100);
}
directionchange();
*/
//w1 = w1+8;
//w2 = w2-1;
//w3 = w3-8;
//w4 = w4+1;
//for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(200);} //uniform tail
//FADE(1, 200, true, 100); //random tail
//delay(200);
}
void Worm01()
{
leds[w1] = CHSV(c1, 255, brightness);// FastLED.show();
dc = w1; wd = w1d; directioncheck(); w1 = dc; w1d = wd; w1m++;
}
void Worm02()
{
leds[w2] = CHSV(c1, 255, brightness);// FastLED.show();
dc = w2; wd = w2d; directioncheck(); w2 = dc; w2d = wd; w2m++;
}
void Worm03()
{
leds[w3] = CHSV(c1, 255, brightness);// FastLED.show();
dc = w3; wd = w3d; directioncheck(); w3 = dc; w3d = wd; w3m++;
}
void Worm04()
{
leds[w4] = CHSV(c1 = (c1 + 1), 255, brightness);// FastLED.show();
dc = w4; wd = w4d; directioncheck(); w4 = dc; w4d = wd; w4m++;
}
void Worm05()
{
leds[w5] = CHSV(c2, 255, brightness);// FastLED.show();
dc = w5; wd = w5d; directioncheck(); w5 = dc; w5d = wd; w5m++;
}
void Worm06()
{
leds[w6] = CHSV(c2, 255, brightness);// FastLED.show();
dc = w6; wd = w6d; directioncheck(); w6 = dc; w6d = wd; w6m++;
}
void Worm07()
{
leds[w7] = CHSV(c2, 255, brightness);// FastLED.show();
dc = w7; wd = w7d; directioncheck(); w7 = dc; w7d = wd; w7m++;
}
void Worm08()
{
leds[w8] = CHSV(c2 = (c2+2), 255, brightness);// FastLED.show();
dc = w8; wd = w8d; directioncheck(); w8 = dc; w8d = wd; w8m++;
}
void Worm09()
{
leds[w9] = CHSV(c3, 255, brightness);// FastLED.show();
dc = w9; wd = w9d; directioncheck(); w9 = dc; w9d = wd; w9m++;
}
void Worm10()
{
leds[w10] = CHSV(c3, 255, brightness);// FastLED.show();
dc = w10; wd = w10d; directioncheck(); w10 = dc; w10d = wd; w10m++;
}
void Worm11()
{
leds[w11] = CHSV(c3, 255, brightness);// FastLED.show();
dc = w11; wd = w11d; directioncheck(); w11 = dc; w11d = wd; w11m++;
}
void Worm12()
{
leds[w12] = CHSV(c3 = (c3+3), 255, brightness);// FastLED.show();
dc = w12; wd = w12d; directioncheck(); w12 = dc; w12d = wd; w12m++;
}
void directionchangeA()
{
if (w1d== 1){w1d= 8;} else if (w1d== 8){w1d=1;} else if (w1d==-1){w1d=-8;} else if (w1d==-8){w1d= -1;}
if (w2d== 1){w2d= 8;} else if (w2d== 8){w2d=1;} else if (w2d==-1){w2d=-8;} else if (w2d==-8){w2d= -1;}
if (w3d== 1){w3d= 8;} else if (w3d== 8){w3d=1;} else if (w3d==-1){w3d=-8;} else if (w3d==-8){w3d= -1;}
if (w4d== 1){w4d= 8;} else if (w4d== 8){w4d=1;} else if (w4d==-1){w4d=-8;} else if (w4d==-8){w4d= -1;}
if (w5d== 1){w5d= 8;} else if (w5d== 8){w5d= 1;} else if (w5d==-1){w5d=-8;} else if (w5d==-8){w5d=-1;}
if (w6d== 1){w6d= 8;} else if (w6d== 8){w6d= 1;} else if (w6d==-1){w6d=-8;} else if (w6d==-8){w6d=-1;}
if (w7d== 1){w7d= 8;} else if (w7d== 8){w7d= 1;} else if (w7d==-1){w7d=-8;} else if (w7d==-8){w7d=-1;}
if (w8d== 1){w8d= 8;} else if (w8d== 8){w8d= 1;} else if (w8d==-1){w8d=-8;} else if (w8d==-8){w8d=-1;}
if (w9d == 1){w9d = 8;} else if (w9d == 8){w9d = 1;} else if (w9d ==-1){w9d =-8;} else if (w9d ==-8){w9d =-1;}
if (w10d== 1){w10d= 8;} else if (w10d== 8){w10d= 1;} else if (w10d==-1){w10d=-8;} else if (w10d==-8){w10d=-1;}
if (w11d== 1){w11d= 8;} else if (w11d== 8){w11d= 1;} else if (w11d==-1){w11d=-8;} else if (w11d==-8){w11d=-1;}
if (w12d== 1){w12d= 8;} else if (w12d== 8){w12d= 1;} else if (w12d==-1){w12d=-8;} else if (w12d==-8){w12d=-1;}
}
void directionchangeB()
{
if (w1d== 1){w1d=-8;} else if (w1d== 8){w1d=-1;} else if (w1d==-1){w1d= 8;} else if (w1d==-8){w1d= 1;}
if (w2d== 1){w2d=-8;} else if (w2d== 8){w2d=-1;} else if (w2d==-1){w2d= 8;} else if (w2d==-8){w2d= 1;}
if (w3d== 1){w3d=-8;} else if (w3d== 8){w3d=-1;} else if (w3d==-1){w3d= 8;} else if (w3d==-8){w3d= 1;}
if (w4d== 1){w4d=-8;} else if (w4d== 8){w4d=-1;} else if (w4d==-1){w4d= 8;} else if (w4d==-8){w4d= 1;}
if (w5d== 1){w5d= -8;} else if (w5d== 8){w5d=-1;} else if (w5d==-1){w5d=8;} else if (w5d==-8){w5d=1;}
if (w6d== 1){w6d= -8;} else if (w6d== 8){w6d=-1;} else if (w6d==-1){w6d=8;} else if (w6d==-8){w6d=1;}
if (w7d== 1){w7d= -8;} else if (w7d== 8){w7d=-1;} else if (w7d==-1){w7d=8;} else if (w7d==-8){w7d=1;}
if (w8d== 1){w8d= -8;} else if (w8d== 8){w8d=-1;} else if (w8d==-1){w8d=8;} else if (w8d==-8){w8d=1;}
if (w9d == 1){w9d = 8;} else if (w9d == 8){w9d = 1;} else if (w9d ==-1){w9d =-8;} else if (w9d ==-8){w9d =-1;}
if (w10d== 1){w10d= 8;} else if (w10d== 8){w10d= 1;} else if (w10d==-1){w10d=-8;} else if (w10d==-8){w10d=-1;}
if (w11d== 1){w11d= 8;} else if (w11d== 8){w11d= 1;} else if (w11d==-1){w11d=-8;} else if (w11d==-8){w11d=-1;}
if (w12d== 1){w12d= 8;} else if (w12d== 8){w12d= 1;} else if (w12d==-1){w12d=-8;} else if (w12d==-8){w12d=-1;}
}
void directioncheck()
{
if ( dc >= 0 and dc <= 63)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 8) { dc = 255; wd = -1;}
if ( dc == 16) { dc = 247; wd = -1;}
if ( dc == 24) { dc = 239; wd = -1;}
if ( dc == 32) { dc = 231; wd = -1;}
if ( dc == 40) { dc = 223; wd = -1;}
if ( dc == 48) { dc = 215; wd = -1;}
if ( dc == 56) { dc = 207; wd = -1;}
if ( dc == 64) { dc = 199; wd = -1;}
}
if (wd == 8)
{
if ( dc == 64) { dc = 135; wd = -1;}
if ( dc == 65) { dc = 143; wd = -1;}
if ( dc == 66) { dc = 151; wd = -1;}
if ( dc == 67) { dc = 159; wd = -1;}
if ( dc == 68) { dc = 167; wd = -1;}
if ( dc == 69) { dc = 175; wd = -1;}
if ( dc == 70) { dc = 183; wd = -1;}
if ( dc == 71) { dc = 191; wd = -1;}
}
if (wd == -1)
{
if ( dc == 55) { dc = 127;}
if ( dc == 47) { dc = 119;}
if ( dc == 39) { dc = 111;}
if ( dc == 31) { dc = 103;}
if ( dc == 23) { dc = 95;}
if ( dc == 15) { dc = 87;}
if ( dc == 7) { dc = 79;}
if ( dc == -1) { dc = 71;}
}
if (wd == -8)
{
if ( dc == -1) { dc = 263; wd = -1;}
if ( dc == -2) { dc = 271; wd = -1;}
if ( dc == -3) { dc = 279; wd = -1;}
if ( dc == -4) { dc = 287; wd = -1;}
if ( dc == -5) { dc = 295; wd = -1;}
if ( dc == -6) { dc = 303; wd = -1;}
if ( dc == -7) { dc = 311; wd = -1;}
if ( dc == -8) { dc = 319; wd = -1;}
}
}
else if ( dc >= 64 and dc <= 127)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 72) { dc = 0;}
if ( dc == 80) { dc = 8;}
if ( dc == 88) { dc = 16;}
if ( dc == 96) { dc = 24;}
if ( dc == 104) { dc = 32;}
if ( dc == 112) { dc = 40;}
if ( dc == 120) { dc = 48;}
if ( dc == 128) { dc = 56;}
}
if (wd == 8)
{ }
if (wd == -1)
{
if ( dc == 119) { dc = 320; wd = 1;}
if ( dc == 111) { dc = 328; wd = 1;}
if ( dc == 103) { dc = 336; wd = 1;}
if ( dc == 95) { dc = 344; wd = 1;}
if ( dc == 87) { dc = 352; wd = 1;}
if ( dc == 79) { dc = 360; wd = 1;}
if ( dc == 71) { dc = 368; wd = 1;}
if ( dc == 63) { dc = 376; wd = 1;}
}
if (wd == -8)
{
if ( dc == 63) { dc = 319;}
if ( dc == 62) { dc = 318;}
if ( dc == 61) { dc = 317;}
if ( dc == 60) { dc = 316;}
if ( dc == 59) { dc = 315;}
if ( dc == 58) { dc = 314;}
if ( dc == 57) { dc = 313;}
if ( dc == 56) { dc = 312;}
}
}
else if ( dc >= 128 and dc <= 191)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 136) { dc = 56; wd = -8;}
if ( dc == 144) { dc = 57; wd = -8;}
if ( dc == 152) { dc = 58; wd = -8;}
if ( dc == 160) { dc = 59; wd = -8;}
if ( dc == 168) { dc = 60; wd = -8;}
if ( dc == 176) { dc = 61; wd = -8;}
if ( dc == 184) { dc = 62; wd = -8;}
if ( dc == 192) { dc = 63; wd = -8;}
}
if (wd == 8)
{ }
if (wd == -1)
{
if ( dc == 183) { dc = 327; wd = 8;}
if ( dc == 175) { dc = 326; wd = 8;}
if ( dc == 167) { dc = 325; wd = 8;}
if ( dc == 159) { dc = 324; wd = 8;}
if ( dc == 151) { dc = 323; wd = 8;}
if ( dc == 143) { dc = 322; wd = 8;}
if ( dc == 135) { dc = 321; wd = 8;}
if ( dc == 127) { dc = 320; wd = 8;}
}
if (wd == -8)
{ }
}
else if ( dc >= 192 and dc <= 255)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 200) { dc = 63; wd = -1;}
if ( dc == 208) { dc = 55; wd = -1;}
if ( dc == 216) { dc = 47; wd = -1;}
if ( dc == 224) { dc = 39; wd = -1;}
if ( dc == 232) { dc = 31; wd = -1;}
if ( dc == 240) { dc = 23; wd = -1;}
if ( dc == 248) { dc = 15; wd = -1;}
if ( dc == 256) { dc = 7; wd = -1;}
}
if (wd == 8)
{ }
if (wd == -1)
{
if ( dc == 247) { dc = 383;}
if ( dc == 239) { dc = 375;}
if ( dc == 231) { dc = 367;}
if ( dc == 223) { dc = 359;}
if ( dc == 215) { dc = 351;}
if ( dc == 207) { dc = 343;}
if ( dc == 199) { dc = 335;}
if ( dc == 191) { dc = 327;}
}
if (wd == -8)
{ }
}
else if ( dc >= 256 and dc <= 319)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 264) { dc = 7; wd = 8;}
if ( dc == 272) { dc = 6; wd = 8;}
if ( dc == 280) { dc = 5; wd = 8;}
if ( dc == 288) { dc = 4; wd = 8;}
if ( dc == 296) { dc = 3; wd = 8;}
if ( dc == 304) { dc = 2; wd = 8;}
if ( dc == 312) { dc = 1; wd = 8;}
if ( dc == 320) { dc = 0; wd = 8;}
}
if (wd == 8)
{
if ( dc == 320) { dc = 64; wd = 8;}
if ( dc == 321) { dc = 65; wd = 8;}
if ( dc == 322) { dc = 66; wd = 8;}
if ( dc == 323) { dc = 67; wd = 8;}
if ( dc == 324) { dc = 68; wd = 8;}
if ( dc == 325) { dc = 69; wd = 8;}
if ( dc == 326) { dc = 70; wd = 8;}
if ( dc == 327) { dc = 71; wd = 8;}
}
if (wd == -1)
{
if ( dc == 311) { dc = 376; wd = -8;}
if ( dc == 303) { dc = 377; wd = -8;}
if ( dc == 295) { dc = 378; wd = -8;}
if ( dc == 287) { dc = 379; wd = -8;}
if ( dc == 279) { dc = 380; wd = -8;}
if ( dc == 271) { dc = 381; wd = -8;}
if ( dc == 263) { dc = 382; wd = -8;}
if ( dc == 255) { dc = 383; wd = -8;}
}
if (wd == -8)
{ }
}
else if ( dc >= 320 and dc <= 383)
{
dc = dc + wd;
if (wd == 1)
{
if ( dc == 328) { dc = 192; wd = 1;}
if ( dc == 336) { dc = 200; wd = 1;}
if ( dc == 344) { dc = 208; wd = 1;}
if ( dc == 352) { dc = 216; wd = 1;}
if ( dc == 360) { dc = 224; wd = 1;}
if ( dc == 368) { dc = 232; wd = 1;}
if ( dc == 376) { dc = 240; wd = 1;}
if ( dc == 384) { dc = 248; wd = 1;}
}
if (wd == 8)
{
if ( dc == 384) { dc = 312; wd = 1;}
if ( dc == 385) { dc = 304; wd = 1;}
if ( dc == 386) { dc = 296; wd = 1;}
if ( dc == 387) { dc = 288; wd = 1;}
if ( dc == 388) { dc = 280; wd = 1;}
if ( dc == 389) { dc = 272; wd = 1;}
if ( dc == 390) { dc = 264; wd = 1;}
if ( dc == 391) { dc = 256; wd = 1;}
}
if (wd == -1)
{
if ( dc == 375) { dc = 64; wd = 1;}
if ( dc == 367) { dc = 72; wd = 1;}
if ( dc == 359) { dc = 80; wd = 1;}
if ( dc == 351) { dc = 88; wd = 1;}
if ( dc == 343) { dc = 96; wd = 1;}
if ( dc == 335) { dc = 104; wd = 1;}
if ( dc == 327) { dc = 112; wd = 1;}
if ( dc == 319) { dc = 120; wd = 1;}
}
if (wd == -8)
{
if ( dc == 319) { dc = 184; wd = 1;}
if ( dc == 318) { dc = 176; wd = 1;}
if ( dc == 317) { dc = 168; wd = 1;}
if ( dc == 316) { dc = 160; wd = 1;}
if ( dc == 315) { dc = 152; wd = 1;}
if ( dc == 314) { dc = 144; wd = 1;}
if ( dc == 313) { dc = 136; wd = 1;}
if ( dc == 312) { dc = 128; wd = 1;}
}
}
}
void fadeToBlack(int ledNo, byte fadeValue)
{ leds[ledNo].fadeToBlackBy( fadeValue ); }
void FADE(byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int SpeedDelay)
{ for(int f=0; f<NUM_LEDS; f++) // fade brightness all LEDs one step
{ if( (!meteorRandomDecay) || (random(10)>5) )
{ fadeToBlack(f, meteorTrailDecay ); }
}
}
FPS: 0
Power: 0.00W
Power: 0.00W