Go Down

Topic: RGB with button and fading (Read 464 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