//---------------------------------------------------------| // From: Ekobots Innovation Ltda - www.ekobots.com | // by: Juan Sirgado y Antico - www.jsya.com.br | //---------------------------------------------------------| // Program Rainbow - 2015/02/09 | // All rights reserved 2015 | //---------------------------------------------------------| int ledPin1 = 7; // LED R connected to digital pin 7 int ledPin2 = 8; // LED G connected to digital pin 8 int ledPin3 = 9; // LED B connected to digital pin 9 int swtPin = 2; // Switch connected to analog pin 2 int ledVal1 = 190; // LED R value to digital pin 7 int ledVal2 = 130; // LED G value to digital pin 8 int ledVal3 = 160; // LED B value to digital pin 9 int delayVal = 500; // Delay in microseconds for the LED int blinkVal = 500; // Value for LED blink loop int delayClr = 1000; // Delay in milliseconds for colors int swtVal = 0; // Switch value for analog pin 2 int stpVal = -1; // Stop change color //---------------------------------------------------------| void setup(void) { Serial.begin(9600); // LED pin configuration pinMode(ledPin1, OUTPUT); // sets the R pin 7 as output pinMode(ledPin2, OUTPUT); // sets the G pin 8 as output pinMode(ledPin3, OUTPUT); // sets the B pin 9 as output pinMode(swtPin, INPUT); // sets Switch pin 5 as input } //---------------------------------------------------------| void loop(void) { // LED pins initialization analogWrite(ledPin1, 0); analogWrite(ledPin2, 0); analogWrite(ledPin3, 0); // LED red-green-blue to rainbow color spectrum // Black to White loop_rainbow_in(); // White to Black loop_rainbow_out(); } //---------------------------------------------------------| void loop_rainbow_in(void) { // Color red loop_high(ledPin1, ledVal1); // Color yellow loop_high(ledPin2, ledVal2); // Color green loop__low(ledPin1, ledVal1); // Color cyan loop_high(ledPin3, ledVal3); // Color blue loop__low(ledPin2, ledVal2); // Color magenta loop_high(ledPin1, ledVal1); // Color white loop_high(ledPin2, ledVal2); delay(delayClr); } //---------------------------------------------------------| void loop_rainbow_out(void) { // Color magenta loop__low(ledPin2, ledVal2); // Color blue loop__low(ledPin1, ledVal1); // Color cyan loop_high(ledPin2, ledVal2); // Color green loop__low(ledPin3, ledVal3); // Color yellow loop_high(ledPin1, ledVal1); // Color red loop__low(ledPin2, ledVal2); // Color black loop__low(ledPin1, ledVal1); delay(delayClr); } //---------------------------------------------------------| void loop_high(int p, int v) { for(int i = 25 ; i > 0 ; i--) // i = intensity { stop_color(); for(int b = 0 ; b < blinkVal ; b++) // b = blink led_blink(b, i, p, v); // p = pin, v = value } delay(delayClr); } //---------------------------------------------------------| void loop__low(int p, int v) { for(int i = 1 ; i < 26 ; i++) // i = intensity { stop_color(); for(int b = 0 ; b < blinkVal ; b++) // b = blink led_blink(b, i, p, v); // p = pin, v = value } delay(delayClr); } //---------------------------------------------------------| void led_blink(int b, int i, int p, int v) { analogWrite(p, (b % i) == 0 ? v : 0); delayMicroseconds(delayVal); } //---------------------------------------------------------| void stop_color() { swtVal = analogRead(swtPin); stpVal = swtVal > 600 ? stpVal * (-1) : stpVal; while(stpVal == 1) { delay(500); swtVal = analogRead(swtPin); stpVal = swtVal > 600 ? stpVal * (-1) : stpVal; } } //---------------------------------------------------------|