//#include "TeensyThreads\TeensyThreads.h"
#include "FastLED\FastLED.h"
#define ledDisplay Serial1
uint8_t *message;
static int messageIndex = 0;
static bool footwellOn = false, partyTimeOn = false, RearOverheadOn = false, underglowOn = false, dancingOn = false;
//tFootWell = 2, tPtyTme = 3, tRearOvr = 4, tUnderGlow = 5, tDance = 6
//FastLED Section
#define NUM_LEDS_OVERHEAD 10
#define DATA_PIN_OVERHEAD 14
#define NUM_LEDS_FOOTWELL 20
#define DATA_PIN_FOOTWELL 2
#define NUM_LEDS_UNDERGLOW 100
#define DATA_PIN_UNDERGLOW 7
CRGB footWell[NUM_LEDS_FOOTWELL];
CRGB overHead[NUM_LEDS_OVERHEAD];
CRGB underGlow[NUM_LEDS_UNDERGLOW];
CLEDController* strips[6];
static uint8_t gBrightness = 75;
static uint8_t hue = 0;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
ledDisplay.begin(115200);
Serial.println("Started and attached");
message = new uint8_t[7]{ 0,0,0,0,0,0,0 };
pinMode(LED_BUILTIN, OUTPUT);
strips[0] = nullptr;
strips[1] = nullptr;
strips[2] = &FastLED.addLeds<NEOPIXEL, DATA_PIN_FOOTWELL>(footWell, NUM_LEDS_FOOTWELL);
strips[3] = nullptr;
strips[4] = &FastLED.addLeds<NEOPIXEL, DATA_PIN_OVERHEAD>(overHead, NUM_LEDS_OVERHEAD);
strips[5] = &FastLED.addLeds<NEOPIXEL, DATA_PIN_UNDERGLOW>(underGlow, NUM_LEDS_UNDERGLOW);
}
void loop() {
if (ledDisplay.available() > 0)
{
serialEventCallbackHandler(messageIndex);
}
else
{
messageIndex = 0;
}
switch (message[2])
{
case 2:
footwellOn = !footwellOn;
if (footwellOn)
{
Serial.println("Footwell LED ON");
fill_solid(footWell, NUM_LEDS_FOOTWELL, CRGB::Blue);
strips[2]->showLeds(gBrightness);
}
else
{
Serial.println("Footwell LED OFF");
fill_solid(footWell, NUM_LEDS_FOOTWELL, CRGB::Black);
strips[2]->showLeds(gBrightness);
}
message[2] = 0;
break;
case 3:
partyTimeOn = !partyTimeOn;
if (partyTimeOn)
{
Serial.println("partyTimeOn ON");
if (footwellOn)
{
Serial.println("Making Party");
cylonMe(NUM_LEDS_FOOTWELL, footWell);
Serial.println("Party Function Over");
}
}
else
{
Serial.println("partyTimeOn OFF");
}
message[2] = 0;
break;
case 4:
RearOverheadOn = !RearOverheadOn;
if (RearOverheadOn)
{
Serial.println("RearOverheadOn LED ON");
fill_solid(overHead, NUM_LEDS_OVERHEAD, CRGB::Red);
strips[4]->showLeds(gBrightness);
}
else
{
Serial.println("RearOverheadOn LED OFF");
fill_solid(overHead, NUM_LEDS_OVERHEAD, CRGB::Black);
strips[4]->showLeds(gBrightness);
}
message[2] = 0;
break;
case 5:
underglowOn = !underglowOn;
if (underglowOn)
{
Serial.println("underglowOn LED ON");
}
else
{
Serial.println("underglowOn LED OFF");
}
message[2] = 0;
break;
case 6:
dancingOn = !dancingOn;
if (dancingOn)
{
Serial.println("dancing ON");
}
else
{
Serial.println("dancing OFF");
}
message[2] = 0;
break;
case 11:
if (gBrightness >= 250)
{
gBrightness = 255;
Serial.print("Brightness is: ");
Serial.println(gBrightness, DEC);
}
else
{
gBrightness += 10;
Serial.println("Brightness UP");
}
for (int t = 0; t < 6; t++)
{
if (strips[t] != nullptr)
{
strips[t]->showLeds(gBrightness);
}
}
message[2] = 0;
break;
case 12:
if (gBrightness <= 10)
{
gBrightness = 0;
Serial.print("Brightness is: ");
Serial.println(gBrightness, DEC);
}
else
{
gBrightness -= 10;
Serial.println("Brightness DOWN");
}
for (int t = 0; t < 6; t++)
{
if (strips[t] != nullptr)
{
strips[t]->showLeds(gBrightness);
}
}
message[2] = 0;
break;
default:
break;
}
delay(20);
}
void serialEventCallbackHandler(int ctr)
{
uint8_t incomingByte;
incomingByte = ledDisplay.read();
message[ctr] = (uint8_t)incomingByte;
messageIndex++;
return;
}
void fadeall(CRGB* leds, int NUM_LEDS)
{
for (int i = 0; i < (NUM_LEDS) / 2; i++)
{
leds[i].nscale8(250);
leds[i + 10].nscale8(250);
}
}
void cylonMe(int NUM_LEDS, CRGB* leds)
{
int n = 0;
while (n < 15)
{
for (int i = 0; i < (NUM_LEDS) / 2; i++) {
leds[i] = CHSV(hue++, 255, 255);
leds[i + 10] = CHSV(hue++, 255, 255);
// Show the leds
strips[2]->showLeds(gBrightness);
leds[i] = CRGB::Black;
leds[i + 10] = CRGB::Black;
fadeall(leds, NUM_LEDS);
delay(10);
}
for (int i = ((NUM_LEDS)-1) / 2; i >= 0; i--) {
leds[i] = CHSV(hue++, 255, 255);
leds[i + 10] = CHSV(hue++, 255, 255);
strips[2]->showLeds(gBrightness);
leds[i] = CRGB::Black;
leds[i + 10] = CRGB::Black;
fadeall(leds, NUM_LEDS);
delay(30);
}
n++;
}
fill_solid(footWell, NUM_LEDS_FOOTWELL, CRGB::Blue);
strips[2]->showLeds(gBrightness);
}