Messing around with this for awhile. Would love to Bluetooth the control side of this but for now it just loops through a few sequences. I’m not very proficient coding but it works.
#include “FastLED.h”
#define NUM_LEDS 60
#define DATA_PIN 13
#define COLOR_ORDER GRB
struct CRGB leds[NUM_LEDS];
//CRGB leds[NUM_LEDS];
int count = 0;
int f = 0; //Front
int l = 0; //Left
int b = 0; //Back
int r = 0; //Right
int fd = (NUM_LEDS/4*3); //Front
int bd = (NUM_LEDS/4); //Back
int rd = (NUM_LEDS/2); //Right
int timer = 30;
int timer2 = 10;
int cycle = 0;
int bright = 32;
int scale = 0;
uint8_t thisdelay = 8; // A delay value for the sequence(s)
volatile long previousMillis = 0;
//Direction Arrays
int FwdArray[] = { //Forward
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59};
int RevArray[] = { //Reverse
59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45};
int ScanArray[] = { //Scan
59, 45, 58, 46, 57, 47, 56, 48, 55, 49, 54, 50, 53, 51, 52};
void setup() {
delay(2000);
LEDS.setBrightness(bright);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// LEDS.addLeds<NEOPIXEL, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
// Serial.begin(9600);
}
void Basic() {
for (count=0;count<=14;count++)
{
f=(ScanArray[count]fd);
r=(FwdArray[count]-rd);
b=(ScanArray[count]-bd);
l=(RevArray[count]);
leds[f] = CRGB::Red;
leds[b] = CRGB::Green;
FastLED.show();
leds[l] = CRGB::Black;
leds[r] = CRGB::Black;
delay(timer);
}
for (count=14;count>=0;count-)
{
f=(ScanArray[count]fd);
r=(FwdArray[count]-rd);
b=(ScanArray[count]-bd);
l=(RevArray[count]);
leds[f] = CRGB::Red;
leds[b] = CRGB::Green;
leds[l] = CRGB::Blue;
leds[r] = CRGB::Blue;
FastLED.show();
leds[f] = CRGB::Black;
leds[b] = CRGB::Black;
delay(timer);
}
}
void Cylon() {
for (count=0;count<=14;count++)
{
f=(ScanArray[count]-fd);
r=(ScanArray[count]-rd);
b=(ScanArray[count]-bd);
l=(ScanArray[count]);
leds[f] = CRGB::DarkMagenta;
leds[b] = CRGB::DarkMagenta;
leds[r] = CRGB::DarkMagenta;
leds[r] = CRGB::DarkMagenta;
FastLED.show();
leds[l] = CRGB::Black;
leds[r] = CRGB::Black;
leds[f] = CRGB::Black;
leds[b] = CRGB::Black;
delay(timer2);
}
for (count=14;count>=0;count-)
{
f=(ScanArray[count]fd);
r=(ScanArray[count]-rd);
b=(ScanArray[count]-bd);
l=(ScanArray[count]);
leds[f] = CRGB::DarkMagenta;
leds[b] = CRGB::DarkMagenta;
leds[l] = CRGB::DarkMagenta;
leds[r] = CRGB::DarkMagenta;
FastLED.show();
// leds[f] = CRGB::Black;
// leds[b] = CRGB::Black;
delay(timer2);
}
// fade down by scaling the brightness
for(int scale = (bright); scale >= (bright/6); scale-) {
LEDS.showColor(CRGB::DarkMagenta, scale);
delay(timer2);
}
// fade up by scaling the brightness
for(int scale = (bright/6); scale <=(bright); scale++) {
LEDS.showColor(CRGB::DarkMagenta, scale);
delay(timer2/2);
}
}
void Rainbow(uint8_t wait)
{
uint16_t hue;
FastLED.clear();
for(hue=10; hue<255*3; hue++)
{
fill_rainbow( &(leds[0]), NUM_LEDS /led count/, hue /starting hue/);
FastLED.show();
delay(wait);
}
return;
}
void twinkle() {
int i = random8(); // A random number. Higher number => fewer twinkles. Use random16() for values >255.
if (i < NUM_LEDS) leds[i] = CHSV(50, 100, 255); // Only the lowest probability twinkles will do. You could even randomize the hue/saturation. .
for (int j = 0; j < NUM_LEDS; j++) leds[j].fadeToBlackBy(8);
// show_at_max_brightness_for_power(); // Power managed display of LED’s
LEDS.show(); // Standard FastLED display
delay(thisdelay); // Old style blocking delay
}
void loop() {
for (cycle=2000;cycle>=0;cycle-)
{
twinkle();
}
for (cycle=20;cycle>=0;cycle-)
{
Basic();
}
for (cycle=20;cycle>=0;cycle–)
{
Cylon();
}
Rainbow(20);
}
//

My flight toolbox is full of really cool new parts - still in their packets. My workshop bench is now a morass of cables, modules, breadboards, computers, connectors, power supplies, etc.