 		}
 	}
 
-	Serial.println(fadeBrightness);
 	setBrightness(fadeBrightness);
 }
 
-void showRainbow(byte wait)
-{
-	uint16_t i;
-	uint16_t j;
-
-	for(j = 0; j < 256 * 5; j++) 
-	{
-		for(i = 0; i < pixels.numPixels(); i++) 
-		{
-			pixels.setPixelColor(i, Wheel(( i + j) & 255));
-		}
-
-		pixels.show();
-		delay(wait);
-	}
-}
-
-uint32_t Wheel(byte WheelPos) 
+void showRainbow()
+{
+	rainbowCounter++;
+	if(rainbowCounter >= 256 * 5)
+	{
+		rainbowCounter = 0;
+	}
+
+	for(int i = 0; i < pixels.numPixels(); i++) 
+	{
+		pixels.setPixelColor(i, Wheel(( i + rainbowCounter) & 255));
+	}
+
+	pixels.show();
+}
+
+uint16_t Wheel(byte WheelPos) 
 {
 	WheelPos = 255 - WheelPos;
 

	fadeThread.onRun(fade);
	fadeThread.enabled = false;

	controller.add(&flashColorThread);
	controller.add(&alternateColorsThread);
	controller.add(&fadeThread);
	
	delay(2000);
	Serial.begin(9600);

);

String cmd;
byte colorOne[3];
byte colorTwo[3];
byte fadeBrightness;
int rainbowCounter;

bool isFlashColor = false;
bool isColorOne = false;
bool isRainbowRunning = false;
bool isFadingDown = true;

void setup()
