Go Down

Topic: RGB with button and fading (Read 482 times) previous topic - next topic

frostin

Adapted some code from lady ada and modified it slighty, also adapted code from a forum member notrabdrahcir (his fading code works quite well!)

Anyways I just combined the 2, modified a little bit:
Code: [Select]



int redVal   = 1; // Variables to store the values to send to the pins
int greenVal = 1;   // Initial values are all off
int blueVal  = 1;

int i = 0;     // Loop counter    
int wait = 15; // 50ms (.05 second) delay; shorten for faster fades


int switchPin = 2; // pushbutton on digital pin 2
int redPin = 5;  // RGB cathode leg to digital pin 5
int greenPin = 6; // RGB cathode leg to digital pin 6
int bluePin = 3; // RGB cathode leg to digital pin 3



int val;
int val2;
int buttonState;

int lightMode = 0;
void setup()
{
 
 
 pinMode(switchPin, INPUT);

 pinMode(redPin, OUTPUT);
 pinMode(greenPin, OUTPUT);
 pinMode(bluePin, OUTPUT);

 Serial.begin(9600);
 buttonState = digitalRead(switchPin);
}

void loop(){
 val = digitalRead(switchPin);
 delay(10);
 val2 = digitalRead(switchPin);
 if (val == val2) {
   if (val != buttonState) {
     if (val == LOW) {
       if (lightMode == 0) {
         lightMode = 1;
       }
       else {
         if (lightMode == 1) {
           lightMode = 2;
         }
         else {
           if (lightMode == 2) {
             lightMode = 3;
           }
           else {
             if (lightMode == 3) {
               lightMode = 4;
             }
             else {
               lightMode = 0;
             }
           }
         }

       }

     }
   }
   buttonState = val;
 }

 //
 if (lightMode == 0) {
   analogWrite(redPin, 0);
   analogWrite(greenPin, 0);
   analogWrite(bluePin, 0);
 }

 if (lightMode == 1) { // RED
   analogWrite(redPin, 255);
   analogWrite(bluePin, 255);
   analogWrite(greenPin, 0);
 }

 if (lightMode == 2) { // BLUE
   analogWrite(redPin, 255);
   analogWrite(bluePin, 0);
   analogWrite(greenPin, 255);


 }
 if (lightMode == 3)  { // GREEN
   analogWrite(redPin, 0);
   analogWrite(greenPin, 255);
   analogWrite(bluePin, 255);
 }
 

   if (lightMode == 4) {
      i += 1;      // Increment counter
 {
 redVal =((i<255)*i)+((i>=255)*255)+((i>511)*(512-i))+((i>766)*(i-766))+((i>=1276)*(i-1276))+((i>1530)*(1530-i))+((i>1786)*(1786-i));
 greenVal =(i<256)*(1)+(i>255)*(i-255)+(i>510)*(510-i)+(i>1020)*(1020-i)+(i>1274)*(i-1274)+(i>1530)*(i-1531)+(i>1785)*(3571-(2*i));
 blueVal =(i<764)*(1)+(i>765)*(i-765)+(i>1020)*(1020-i)+(i>1786)*(1786-i);
 }

 if (i > 2040) //
 {
   i = 1;
 }  

 // we do "255-redVal" instead of just "redVal" because the
 // LEDs are hooked up to +5V instead of Gnd
 analogWrite(redPin,   redVal);   // Write current values to LED pins
 analogWrite(greenPin, greenVal);
 analogWrite(bluePin,  blueVal);  

 delay(wait); // Pause for 'wait' milliseconds before resuming the loop
}
}




Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy