//F_lying fibonacci 256
//Fastled fibonacci 256 RGB leds demo
//Yaroslaw Turbin, 28.01.2020
//https://vk.com/ldirko
//https://www.reddit.com/user/ldirko/
#include "FastLED.h"
// Matrix size
#define NUM_ROWS 20
#define NUM_COLS 20
// LEDs pin
#define DATA_PIN 3
// LED brightness
#define BRIGHTNESS 255
// Define the array of leds
CRGB leds[257];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, 256);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
static byte hue =0;
EVERY_N_MILLISECONDS(30) { hue++; } //30 - speed of hue change
byte x1 = beatsin8 (18, 0, (NUM_COLS-1));
byte x2 = beatsin8 (23, 0, (NUM_COLS-1));
byte x3 = beatsin8 (27, 0, (NUM_COLS-1));
byte x4 = beatsin8 (31, 0, (NUM_COLS-1));
byte x5 = beatsin8 (33, 0, (NUM_COLS-1));
byte y1 = beatsin8 (20, 0, (NUM_ROWS-1));
byte y2 = beatsin8 (26, 0, (NUM_ROWS-1));
byte y3 = beatsin8 (15, 0, (NUM_ROWS-1));
byte y4 = beatsin8 (27, 0, (NUM_ROWS-1));
byte y5 = beatsin8 (30, 0, (NUM_ROWS-1));
CRGB color = CHSV (hue,255,BRIGHTNESS);
fadeToBlackBy (leds,256, 40 );
mydrawLine(x1, y1, x2, y2, color,1);
mydrawLine(x2, y2, x3, y3, color,1);
mydrawLine(x2, y2, x4, y4, color,1);
mydrawLine(x3, y3, x4, y4, color,1);
mydrawLine(x3, y3, x1, y1, color,1);
mydrawLine(x4, y4, x1, y1, color,1);
FastLED.show();
} //loop
void mydrawLine (byte x, byte y, byte x1, byte y1, CRGB color, bool dot){ // my ugly line draw function )))
byte xsteps = abs8(x-x1)+1;
byte ysteps = abs8(y-y1)+1;
byte steps = xsteps >= ysteps? xsteps:ysteps;
for (byte i = 1; i <= steps; i++) {
byte dx = lerp8by8 (x, x1, i*255/steps);
byte dy = lerp8by8 (y, y1, i*255/steps);
leds[XY(dx, dy)] += color; // change to += for brightness look
}
if (dot) { //add white point at the ends of line
leds[XY(x,y)] += CRGB ::White;
leds[XY(x1,y1)] += CRGB ::White;
}
}
uint16_t XY(byte x, byte y) {
static const uint16_t FibonPlanarTable[]={
256,256,256,256,256,256,256,256,36,39,38,37,256,256,256,256,256,256,256,256,256,256,256,256,256,13,34,35,40,
256,58,59,60,61,256,256,256,256,256,256,256,256,256,256,14,33,256,41,56,57,68,67,66,65,64,63,256,256,256,256,
256,256,256,12,15,32,42,55,256,69,256,79,80,81,82,83,62,256,256,256,256,256,11,16,31,256,43,54,70,77,78,94,
93,92,91,90,84,85,256,256,256,255,10,17,30,44,53,71,76,256,95,256,101,102,103,104,89,88,256,256,256,254,9,18,
29,45,52,72,75,96,256,100,120,119,118,117,105,106,87,256,256,253,8,19,28,46,256,51,73,97,99,121,124,125,126,
256,116,256,107,86,232,252,7,20,256,27,47,256,50,74,122,123,145,144,256,127,256,115,256,108,233,251,6,256,21,
256,26,48,49,256,98,146,147,148,143,256,128,256,114,109,231,234,250,5,256,22,23,25,24,0,195,171,170,169,149,
142,256,129,113,110,230,235,256,249,4,3,2,1,244,243,256,194,172,256,168,150,141,130,112,256,256,229,236,256,
248,247,246,245,242,220,219,196,193,173,167,151,140,131,111,256,256,208,228,237,238,239,240,241,256,221,218,
197,192,174,166,152,139,132,256,256,256,256,209,227,226,256,256,256,222,256,217,198,191,175,165,153,138,133,
256,256,256,256,207,210,211,225,224,223,215,216,199,256,190,176,164,154,137,134,256,256,256,256,256,206,205,
212,213,214,201,200,256,189,177,163,256,155,136,256,256,256,256,256,256,256,256,204,203,202,256,187,188,178,
162,256,156,135,256,256,256,256,256,256,256,256,256,183,184,185,186,180,179,161,256,157,256,256,256,256,256,
256,256,256,256,256,256,256,256,182,181,159,160,256,158,256,256,256,256,256,256,256
};
return (FibonPlanarTable[y*20+x]);
}