     }
 }
 
+// random colored speckles that blink in and fade smoothly...but it sucks
 void confetti() {
-    // random colored speckles that blink in and fade smoothly
     fadeToBlackBy(leftLense, NUM_LEDS, 25);
     fadeToBlackBy(rightLense, NUM_LEDS, 25);
     uint8_t pos = random16(NUM_LEDS);
 
-    leftLense[pos] += CHSV(hue + random8(64), 200, 255);
-    rightLense[pos] += CHSV(hue + random8(64), 200, 255);
+    leftLense[pos] += CHSV(hue + random8(64), 200, 200);
+    rightLense[pos] += CHSV(hue + random8(64), 200, 200);
 
     FastLED.show();
     FastLED.delay(1000 / FRAMES_PER_SECOND);
     hue++;
     EVERY_N_MILLISECONDS(20)
     { hue++; }
+}
+
+void bpm() {
+    // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
+    uint8_t BeatsPerMinute = 120;
+    CRGBPalette16 palette = PartyColors_p;
+    uint8_t beat = beatsin8(BeatsPerMinute, 64, 255);
+    for (int i = 0; i < NUM_LEDS; i++) { //9948
+        rightLense[i] = ColorFromPalette(palette, hue + (i * 2), beat - hue + (i * 8));
+        leftLense[i] = ColorFromPalette(palette, hue + (i * 2), beat - hue + (i * 8));
+    }
+    FastLED.show();
+    EVERY_N_MILLISECONDS( 20 ) { hue++; } // slowly cycle the "base color" through the rainbow
+}
+
+void sinelon()
+{
+    // a colored dot sweeping back and forth, with fading trails
+    fadeToBlackBy( rightLense, NUM_LEDS, 20);
+    fadeToBlackBy( leftLense, NUM_LEDS, 20);
+    int pos = beatsin16(13,0,NUM_LEDS);
+    rightLense[pos] += CHSV( hue, 200, 192);
+    leftLense[pos] += CHSV( hue, 200, 192);
+
+    FastLED.show();
+    EVERY_N_MILLISECONDS( 20 ) { hue++; } // slowly cycle the "base color" through the rainbow
+}
+
+
+void juggle() {
+    // eight colored dots, weaving in and out of sync with each other
+    fadeToBlackBy( rightLense, NUM_LEDS, 20);
+    fadeToBlackBy( leftLense, NUM_LEDS, 20);
+    byte dothue = 0;
+    for( int i = 0; i < 8; i++) {
+        rightLense[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 180);
+        leftLense[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 180);
+        dothue += 32;
+    }
+
+    FastLED.show();
+    EVERY_N_MILLISECONDS( 20 ) { hue++; } // slowly cycle the "base color" through the rainbow
 }
 
 void pendulum() {

}

void activateGestureModeSelect() {
    int hueCounter = 1;
    for (int i = 0; i < NUM_LEDS; i++) {
        if (i < round(NUM_LEDS / 5 * currentPatternNumber)) {
            if (i % round(NUM_LEDS / 5) == 0) {
                hueCounter += 50;
            }
            rightLense[i] = CHSV(hueCounter, 255, 100);
            leftLense[i] = CHSV(hueCounter, 255, 100);
        }
        else {
            rightLense[i] = CRGB(0, 0, 0);
            leftLense[i] = CRGB(0, 0, 0);
        }
    }
    FastLED.show();
    for (int i = 0; i < 100; i++) {
        delay(20);
        lsm.getEvent(&accel, &mag, &gyro, &temp);
        if (accel.acceleration.z > 0.70) {
            previousPattern();
            break;
        }
        if (accel.acceleration.z < -0.70) {
            nextPattern();
            break;
        }

    if (direction == false) {
        fadeAmount = -fadeAmount;
    }
    lsm.getEvent(&accel, &mag, &gyro, &temp);
    CRGB magHeadingBasedColor = convertHeadingToColor(fabs(round(mag.magnetic.z * 100)), 180);
    int tempBrightness = brightness;
