// song; wake me up (2cello), link: https://www.youtube.com/watch?v=ElI0_fqFacA
// use the FastLED library (someone's pre-written code)
#include <FastLED.h>
// set how many LEDs there are and the data pin.
const int numLeds = 30;
const int ledStripPin = 6;
const int beat = 208.5; // orginally 417
// this creates an array to reference our LEDs
CRGB leds[numLeds];
void setup() {
// tells the FastLED code e.g. what LEDs we are using, the data pin
FastLED.addLeds<NEOPIXEL, ledStripPin>(leds, numLeds);
// limit the strip's draw to 400mA at 5v
FastLED.setMaxPowerInVoltsAndMilliamps(5, 400);
// turns the brightness down (so my eyes don't hurt)
FastLED.setBrightness(8);
pinMode(7, INPUT_PULLUP);
}
void loop() {
if (digitalRead(7) == LOW) {
song();
}
}
void song(){
hook(10); // counts for 2 beat
respond_out(5);
respond_out(6);
respond_out(7);
respond_out(9);
respond_out(10);
respond_out(8);
respond_out(9);
respond_out(9);
respond_out(10);
respond_out(9);
respond_out(9);
respond_out(10);
delay(beat);
respond_combined(4,10);
respond_in(7);
respond_in(6);
//clear_in();
delay(340);
respond_in(8);
respond_in(9);
respond_in(8);
respond_in(7);
respond_in(6);
respond_in(8);
respond_combined(4,10);
respond_out(8);
respond_out(9);
respond_in(10);
respond_in(8);
respond_in(8);
respond_in(9);
respond_in(8);
respond_in(7);
respond_in(6);
respond_in(8);
respond_combined(4,10);
respond_out(8);
respond_out(9);
respond_in(10);
respond_in(14);
respond_in(13);
respond_in(9);
respond_in(7);
respond_in(6);
respond_in(9);
respond_combined(4,10);
//clear_in();
fade();
}
void reset(){
for (int light=0; light<30; light++) {
leds[light].setRGB(0,0,0);
FastLED.show();
}
}
void respond_out(int vol) {
const int delay_between = (beat / vol);
// delay_between * vol = beat / 2 (208.5)
for (int light=0; light<vol; light++) {
leds[29 - light].setRGB(255, 0, 0);
leds[light].setRGB(255, 0, 0);
FastLED.show();
delay(delay_between);
}
delay(beat);
reset();
}
void respond_in(int vol) {
const int delay_between = (beat / vol);
// delay_between * vol = beat / 2 (208.5)
for (int light=0; light<vol; light++) {
leds[15 + light].setRGB(0, 255, 0);
leds[15 - light].setRGB(0, 255, 0);
FastLED.show();
delay(delay_between);
}
delay(beat);
reset();
}
void hook(int vol) { // start
// make it like respond_out but it led light will return back to the start
const int delay_between = (beat / vol);
// delay_between * vol = beat / 2 (208.5)
for (int light=0; light<vol; light++) {
leds[29 - light].setRGB(255, 0, 0);
leds[light].setRGB(255, 0, 0);
FastLED.show();
delay(delay_between);
}
delay(beat);
for (int light=0; light<vol; light++) {
leds[15 + light].setRGB(0, 255, 0);
leds[15 - light].setRGB(0, 255, 0);
FastLED.show();
delay(delay_between);
}
delay(beat);
reset();
}
void fade() { // end part (final ++>)
// makes every led fade off
for (int light=0; light<30; light++) {
leds[light].setRGB(255, 255, 255);
}
FastLED.show();
delay(100);
for (int light=0; light<30; light++) {
int randomNumber = random(1,30);
leds[randomNumber].setRGB(0, 0, 0);
delay(13.44);
FastLED.show();
}
for (int light=0; light<30; light++) {
leds[light].setRGB(0, 0, 0);
delay(13.44);
FastLED.show();
}
}
void clear_in() {
const int delay_between = (beat / 30);
// delay_between * vol = beat / 2 (208.5)
for (int light=0; light<30; light++) {
leds[15 + light].setRGB(0, 255, 255);
leds[15 - light].setRGB(0, 255, 255);
FastLED.show();
delay(delay_between);
}
delay(beat);
reset();
}
void respond_combined(int vol1, int vol2) {
// vol1 = out, vol2 = in
const int delay_between = (beat / vol1);
// delay_between * vol = beat / 2 (208.5)
for (int light=0; light<vol1; light++) {
leds[15 + light].setRGB(0, 0, 255);
leds[15 - light].setRGB(0, 0, 255);
FastLED.show();
delay(delay_between / 2);
}
for (int light=0; light<vol2; light+=2) {
leds[29 - light].setRGB(255, 255, 0);
leds[light].setRGB(255, 255, 0);
FastLED.show();
delay(delay_between / 2);
}
delay(beat);
reset();
}