#include <FastLED.h>
#define NUM_LEDS 8
#define din 4
#define btn 5
#define led 14
CRGB leds[NUM_LEDS];
byte hue = 0;
int delayTime = 100;
bool mode = true;
void setup() {
Serial.begin(115200);
Serial.println("Start");
pinMode(led, OUTPUT);
digitalWrite(led, 0);
pinMode(btn, INPUT_PULLUP);
FastLED.addLeds<WS2812,din,GRB>(leds,NUM_LEDS);
FastLED.setBrightness(255);
while(digitalRead(btn));
digitalWrite(led, 1);
delay(250);
}
void loop() {
if(mode){
chaseLeft();
chaseRight();
centerOut();
allOn();
quickFlash();
slowFlash();
altFlash1();
altFlash2();
}
else{
if(!digitalRead(btn)){
digitalWrite(led, 1);
mode = true;
delay(500);
}
}
}
void btnCheck(){
unsigned long timer = millis();
while(!digitalRead(btn)){
if(millis() - timer > 2000){
Serial.println("Turning off LEDs");
FastLED.clear();
FastLED.show();
digitalWrite(led, 0);
mode = false;
delay(3000);
}
delay(250);
}
}
void chaseLeft(){
Serial.println("Chase Left");
while(digitalRead(btn)){
for(int i=7;i>=0;i--){
leds[i] = CHSV(hue, 255, 160);
leds[i-1] = CHSV(hue, 255, 192);
leds[i-2] = CHSV(hue, 255, 224);
leds[i-3] = CHSV(hue, 255, 255);
FastLED.show();
delay(delayTime);
leds[i] = CHSV(hue, 255, 0);
FastLED.show();
if(!digitalRead(btn)) break;
}
}
btnCheck();
}
void chaseRight(){
Serial.println("Chase Right");
while(digitalRead(btn)){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, 160);
leds[i+1] = CHSV(hue, 255, 192);
leds[i+2] = CHSV(hue, 255, 224);
leds[i+3] = CHSV(hue, 255, 255);
FastLED.show();
delay(delayTime);
leds[i] = CHSV(hue, 255, 0);
FastLED.show();
if(!digitalRead(btn)) break;
}
}
btnCheck();
}
void centerOut(){
Serial.println("Center Out");
while(digitalRead(btn)){
for(int i=0;i<4;i++){
leds[3-i] = CHSV(hue, 255, 192);
leds[4+i] = CHSV(hue, 255, 192);
leds[2-i] = CHSV(hue, 255, 255);
leds[5+i] = CHSV(hue, 255, 255);
FastLED.show();
delay(delayTime*1.5);
leds[3-i] = CHSV(hue, 255, 0);
leds[4+i] = CHSV(hue, 255, 0);
FastLED.show();
if(!digitalRead(btn)) break;
}
}
btnCheck();
}
void allOn(){
Serial.println("All ON");
while(digitalRead(btn)){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, 255);
}
FastLED.show();
if(!digitalRead(btn)) break;
}
btnCheck();
}
void quickFlash(){
Serial.println("All ON Quick Flashing");
while(digitalRead(btn)){
for(int k=0;k<10;k++){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, k*25);
}
FastLED.show();
delay(10);
}
delay(delayTime);
if(!digitalRead(btn)) break;
for(int k=10;k>=0;k--){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, k*25);
}
FastLED.show();
delay(10);
}
delay(delayTime);
if(!digitalRead(btn)) break;
}
btnCheck();
}
void slowFlash(){
Serial.println("All ON Slow Flashing");
while(digitalRead(btn)){
for(int k=0;k<10;k++){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, k*25);
}
FastLED.show();
delay(20);
}
for(int i=0;i<10;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
for(int k=10;k>=0;k--){
for(int i=0;i<8;i++){
leds[i] = CHSV(hue, 255, k*25);
}
FastLED.show();
delay(20);
}
for(int i=0;i<5;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
}
btnCheck();
}
void altFlash1(){
Serial.println("Alternating 4 and 4 Flashing");
while(digitalRead(btn)){
for(int i=0;i<4;i++){
leds[i] = CHSV(hue, 255, 255);
leds[i+4] = CHSV(hue, 255, 0);
}
FastLED.show();
for(int i=0;i<5;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
for(int i=0;i<4;i++){
leds[i+4] = CHSV(hue, 255, 255);
leds[i] = CHSV(hue, 255, 0);
}
FastLED.show();
for(int i=0;i<5;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
}
btnCheck();
}
void altFlash2(){
Serial.println("Alternating 1,3,5,7 and 2,4,6,8");
while(digitalRead(btn)){
leds[0] = CHSV(hue, 255, 255);
leds[1] = CHSV(hue, 255, 0);
leds[2] = CHSV(hue, 255, 255);
leds[3] = CHSV(hue, 255, 0);
leds[4] = CHSV(hue, 255, 255);
leds[5] = CHSV(hue, 255, 0);
leds[6] = CHSV(hue, 255, 255);
leds[7] = CHSV(hue, 255, 0);
FastLED.show();
for(int i=0;i<5;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
leds[0] = CHSV(hue, 255, 0);
leds[1] = CHSV(hue, 255, 255);
leds[2] = CHSV(hue, 255, 0);
leds[3] = CHSV(hue, 255, 255);
leds[4] = CHSV(hue, 255, 0);
leds[5] = CHSV(hue, 255, 255);
leds[6] = CHSV(hue, 255, 0);
leds[7] = CHSV(hue, 255, 255);
FastLED.show();
for(int i=0;i<5;i++){
if(!digitalRead(btn)) break;
delay(delayTime);
}
if(!digitalRead(btn)) break;
}
btnCheck();
}