/* Song chosen: What is Love
Time frame: 0:00 to 0:23*/
// 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 oneBeat = 484;
const int halfBeat = oneBeat / 2;
// 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(2, INPUT_PULLUP);
}
void loop() {
if (digitalRead(2) == LOW) {
delay(halfBeat);
firstPhrase();
backgroundBeat();
}
}
void firstPhrase () {
fourWordPhrase();
threeWordPhrase();
phraseEnding();
}
void backgroundBeat () {
beatSequence();
}
void allBlack () {
//basic for loop
for (int i = 0; i < 30; i ++) {
leds[i].setRGB (0, 0, 0);
}
FastLED.show();
}
void fourWordPhrase () {
for (int i = 0; i < 10; i++) {
leds[i] = CRGB::White;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 10; i++) {
leds[20 + i] = CRGB::Blue;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 10; i++) {
leds[10 + i] = CRGB::Purple;
}
FastLED.show();
delay(halfBeat);
allBlack();
for (int i = 0; i < 15; i++) {
leds[14 - i] = CRGB::Yellow;
leds[15 + i] = CRGB::Purple;
FastLED.show();
delay(oneBeat / 15);
}
delay(oneBeat);
allBlack();
FastLED.show();
delay(halfBeat - oneBeat / 15);
//increment for loop
for (int i = 0; i < 30; i += 2) {
if ((i % 4) == 0) {
leds[i] = CRGB::Green;
}
else {
leds[i] = CRGB::Red;
}
}
FastLED.show();
delay(halfBeat);
allBlack();
for (int i = 0; i < 30; i += 2) {
if ((i % 4) == 0) {
leds[1 + i] = CRGB::Purple;
}
else {
leds[1 + i] = CRGB::White;
}
}
FastLED.show();
delay(halfBeat);
allBlack();
for (int i = 0; i < 30; i += 2) {
if ((i % 4) == 0) {
leds[i] = CRGB::Blue;
}
else {
leds[i] = CRGB::Yellow;
}
}
FastLED.show();
delay(halfBeat);
allBlack();
}
void threeWordPhrase () {
//mini repeated pattern for loop
for (int i = 0; i < 13; i++) {
leds[i] = CRGB::Purple;
leds[i + 1] = CRGB::Purple;
leds[i + 2] = CRGB::Purple;
leds[i - 1] = CRGB::Black;
leds[29 - i] = CRGB::Purple;
leds[28 - i] = CRGB::Purple;
leds[27 - i] = CRGB::Purple;
leds[30 - i] = CRGB::Black;
FastLED.show();
delay(halfBeat / 7.5);
}
//contains reversing direction in for loop
for (int i = 0; i < 13; i++) {
leds[14 - i] = CRGB::Purple;
leds[13 - i] = CRGB::Purple;
leds[12 - i] = CRGB::Purple;
leds[15 - i] = CRGB::Black;
leds[15 + i] = CRGB::Purple;
leds[16 + i] = CRGB::Purple;
leds[17 + i] = CRGB::Purple;
leds[14 + i] = CRGB::Black;
FastLED.show();
delay(halfBeat / 7.5);
}
allBlack();
for (int i = 0; i < 30; i += 3) {
leds[i] = CRGB::Red;
}
for (int i = 1; i < 30; i += 3) {
leds[i] = CRGB::Blue;
}
for (int i = 2; i < 30; i += 3) {
leds[i] = CRGB::Yellow;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 30; i += 3) {
leds[i] = CRGB::Yellow;
}
for (int i = 1; i < 30; i += 3) {
leds[i] = CRGB::Red;
}
for (int i = 2; i < 30; i += 3) {
leds[i] = CRGB::Blue;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 30; i += 3) {
leds[i] = CRGB::Blue;
}
for (int i = 1; i < 30; i += 3) {
leds[i] = CRGB::Yellow;
}
for (int i = 2; i < 30; i += 3) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(oneBeat);
allBlack();
}
void phraseEnding() {
for (int i = 1; i < 30; i += 2) {
leds[i] = CRGB::Purple;
}
for (int i = 0; i < 30; i += 2) {
leds[i] = CRGB::Blue;
}
FastLED.show();
delay(halfBeat);
for (int i = 1; i < 30; i += 2) {
leds[i] = CRGB::Blue;
}
for (int i = 0; i < 30; i += 2) {
leds[i] = CRGB::Purple;
}
FastLED.show();
delay(oneBeat);
for (int i = 1; i < 30; i += 2) {
leds[i] = CRGB::Purple;
}
for (int i = 0; i < 30; i += 2) {
leds[i] = CRGB::Blue;
}
FastLED.show();
delay(oneBeat * 2);
for (int i = 0; i < 15; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 15; i++) {
leds[15 + i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat * 4 + halfBeat);
}
void beatSequence () {
for (int i = 0; i < 30; i++) {
leds[i] = CRGB::Green;
FastLED.show();
delay(oneBeat / 30);
}
for (int i = 0; i < 30; i++) {
leds[29 - i] = CRGB::Red;
FastLED.show();
delay(oneBeat / 30);
}
for (int i = 0; i < 8; i++) {
leds[8 + i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat / 4 * 3);
for (int i = 0; i < 8; i++) {
leds[16 + i] = CRGB::Black;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 8; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 8; i++) {
leds[24 + i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 8; i++) {
leds[8 + i] = CRGB::Yellow;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 8; i++) {
leds[16 + i] = CRGB::Green;
}
FastLED.show();
delay(oneBeat / 4 * 3);
for (int i = 0; i < 8; i++) {
leds[i] = CRGB::Purple;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 8; i++) {
leds[24 + i] = CRGB::Blue;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 15; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 20; i++) {
leds[15 + i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat / 4 * 3);
//random for loop
for (int i = 0; i < 20; i++) {
int ran = random(0, 30);
leds[ran] = CRGB::Yellow;
}
FastLED.show();
delay(halfBeat);
allBlack();
for (int i = 0; i < 20; i++) {
int ran = random(0, 30);
leds[ran] = CRGB::Blue;
}
FastLED.show();
delay(halfBeat);
allBlack();
for (int i = 0; i < 20; i++) {
int rand = random(0, 30);
leds[rand] = CRGB::Green;
FastLED.show();
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 15; i++) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 15; i++) {
leds[15 + i] = CRGB::Blue;
}
FastLED.show();
delay(4 * oneBeat);
allBlack();
for (int i = 0; i < 30; i += 2) {
leds[i] = CRGB::Yellow;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 30; i += 2) {
leds[i + 1] = CRGB::Purple;
}
FastLED.show();
delay(oneBeat);
for (int i = 0; i < 10; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(oneBeat / 4 * 3);
for (int i = 0; i < 10; i++) {
leds[20 + i] = CRGB::Black;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 10; i++) {
leds[10 + i] = CRGB::Black;
}
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 10; i++) {
leds[i] = CRGB::Green;
FastLED.show();
delay(oneBeat / 20);
}
delay(oneBeat - halfBeat);
for (int i = 0; i < 10; i++) {
leds[29 - i] = CRGB::Green;
FastLED.show();
delay(oneBeat / 20);
}
delay(oneBeat - halfBeat);
for (int i = 0; i < 4; i++) {
leds[16 + i] = CRGB::Blue;
}
FastLED.show();
delay(oneBeat / 4 * 3);
for (int i = 0; i < 4; i++) {
leds[10 + i] = CRGB::Blue;
}
FastLED.show();
delay(halfBeat);
leds[14] = CRGB::Yellow;
leds[15] = CRGB::Yellow;
FastLED.show();
delay(halfBeat);
for (int i = 0; i < 30; i++) {
leds[i] = CRGB::Red;
FastLED.show();
delay(oneBeat / 30);
}
for (int i = 0; i < 30; i++) {
leds[29 - i] = CRGB::Purple;
FastLED.show();
delay(oneBeat / 30);
}
delay(halfBeat);
}