 #define PIXEL_TYPE WS2812B
 #define HUE_STEP 10 // 1..255, each loop increments hue by this value
 #define LOOP_DELAY 100 //ms
-#define HSV_BRIGHTNESS 60 //0-255
+#define HSV_BRIGHTNESS 60 //0-255 (FYI this tends to be a bit lower than BASE_BRIGHTNESS)
 #define HSV_SATURATION 255
 #define BASE_BRIGHTNESS 40 //0-255
 /* set this to match the number of patterns you flip
 between when holding the setup button */
-#define N_PATTERNS 4
-#define SETUP_BUTTON_HOLD_DURATION 500
+#define N_PATTERNS 5
+#define SETUP_BUTTON_HOLD_DURATION 800 // ms
 
 // PORNJ!!!! These values are selected to look decent on RBG LEDs
 #define DISORIENT_PINK_R 252

    }
  }
  if (pattern == 0){
    pattern_disorient_half_circle_rotate(&strip);
  } else if (pattern == 1) {
    pattern_hsv_offset_circle_loop(&strip);
  } else if (pattern == 2) {
    pattern_hsv_circle_loop(&strip);
  } else if (pattern == 3) {
    pattern_disorient_1(&strip);
  }

  delay(LOOP_DELAY);

  (*strip).show();
}

// pattern 2
void pattern_hsv_offset_circle_loop(Adafruit_NeoPixel *strip){
  uint8_t offset = 0;
  RgbColor rgb;
  HsvColor hsv;
  for (int i = 0 ; i < PIXEL_COUNT ; ++i){
    offset = ((float)i/(PIXEL_COUNT-1))*255;
    hsv = HsvColor(base_hue+offset, HSV_SATURATION, HSV_BRIGHTNESS);
    rgb = HsvToRgb(hsv);
    (*strip).setPixelColor(i, rgb.r, rgb.g, rgb.b);
  }
  base_hue += HUE_STEP;
  (*strip).show();
}

// pattern 3
void pattern_hsv_circle_loop(Adafruit_NeoPixel *strip){
  HsvColor hsv(base_hue, HSV_SATURATION, HSV_BRIGHTNESS);
  RgbColor rgb = HsvToRgb(hsv);
  for (int i = 0 ; i < PIXEL_COUNT ; ++i){
    (*strip).setPixelColor(i, rgb.r, rgb.g, rgb.b);
  }
  base_hue += HUE_STEP;
  (*strip).show();
}

// pattern 4
void pattern_disorient_2(Adafruit_NeoPixel *strip){
  // same as pattern 0, but in quadrants
  uint8_t offset_0, offset_1, offset_2, offset_3, offset_4;
  offset_0 = 0;
  offset_1 = PIXEL_COUNT/4;
  offset_2 = PIXEL_COUNT/2;
  offset_3 = offset_1+offset_2;
  long t = millis()*0.25;
  uint8_t offset = t % PIXEL_COUNT;
  uint8_t new_i = 0;
  for (int i = 0 ; i < PIXEL_COUNT ; ++i){
    new_i = (i + offset) % PIXEL_COUNT;
    if (i >= offset_0 && i < offset_1 || i >= offset_2 && i < offset_3) {
      (*strip).setPixelColor(new_i, DISORIENT_PINK_R, DISORIENT_PINK_G, DISORIENT_PINK_B);
    } else {
      (*strip).setPixelColor(new_i, DISORIENT_ORANGE_R, DISORIENT_ORANGE_G, DISORIENT_ORANGE_B);
    }
    if (random(100) <= 5) {
      // random sparkles
      (*strip).setPixelColor(new_i, 255, 255, 255);
    }
  }
  (*strip).setBrightness(BASE_BRIGHTNESS);
  (*strip).show();
}

// loop() runs over and over again, as quickly as it can execute.
void loop() {
