   }
 }
 
+void initColors() {
+  for (int i = 0; i < strip.numPixels(); i++) {
+    reds[i] = random(256);
+    greens[i] = random(256);
+    blues[i] = random(256);
+  }
+}
+
 void simUpsideDownTouch(uint8_t pixel) {
   colorWipe();
 
-  int red = random(256);
-  int green = random(256);
-  int blue = random(256);
+  int red = reds[pixel];
+  int green = greens[pixel];
+  int blue = blues[pixel];
   
   for (uint8_t fade = 0; fade < FPS; fade++) {
-    int brightness = fade * 3;
+    int brightness = fade;
     strip.setPixelColor(pixel - 1, red - brightness, green - brightness, blue - brightness);
     strip.setPixelColor(pixel, red - brightness, green - brightness, blue - brightness);
     strip.setPixelColor(pixel + 1, red - brightness, green - brightness, blue - brightness);

  }

  for (uint8_t fade = FPS; fade > 0; fade--) {
    int brightness = fade * 3;
    strip.setPixelColor(pixel - 1, red - brightness, green - brightness, blue - brightness);
    strip.setPixelColor(pixel, red - brightness, green - brightness, blue - brightness);
    strip.setPixelColor(pixel + 1, red - brightness, green - brightness, blue - brightness);

  if (F_CPU == 16000000)
    clock_prescale_set(clock_div_1);
#endif

  initColors();

  strip.begin();
  strip.show();
