//set colors to pins const int RED_PIN = 9; const int GREEN_PIN = 10; const int BLUE_PIN = 11; //time elapsed in milliseconds for spectrum int DISPLAY_TIME = 10; //setup output terminals void setup() { pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(BLUE_PIN, OUTPUT); } //Indefinitely loop color functions void loop() { mainColors(); showSpectrum(); } //display primary and secondary colors one second each void mainColors() { digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, LOW); delay(1000); digitalWrite(RED_PIN, HIGH); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, LOW); delay(1000); digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, HIGH); digitalWrite(BLUE_PIN, LOW); delay(1000); digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, HIGH); delay(1000); digitalWrite(RED_PIN, HIGH); digitalWrite(GREEN_PIN, HIGH); digitalWrite(BLUE_PIN, LOW); delay(1000); digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, HIGH); digitalWrite(BLUE_PIN, HIGH); delay(1000); digitalWrite(RED_PIN, HIGH); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, HIGH); delay(1000); digitalWrite(RED_PIN, HIGH); digitalWrite(GREEN_PIN, HIGH); digitalWrite(BLUE_PIN, HIGH); delay(1000); } //loop for spectrum display void showSpectrum() { int x; for(x = 0; x < 768; x++) { showRGB(x); delay(DISPLAY_TIME); } } //function to determine intensity of colors for spectrum void showRGB(int color) { int redIntensity; int greenIntensity; int blueIntensity; if (color <= 255) { redIntensity = 255 - color; greenIntensity = color; blueIntensity = 0; } else if(color <= 511) { redIntensity = 0; greenIntensity = 255 - (color - 256); blueIntensity = (color - 256); } else { redIntensity = (color - 512); greenIntensity = 0; blueIntensity = 255 - (color - 512); } //display colors with determined intensities analogWrite(RED_PIN, redIntensity); analogWrite(GREEN_PIN, greenIntensity); analogWrite(BLUE_PIN, blueIntensity); }