lampada led rgb

ciao a tutti! come faccio a far variare di colore i miei 3 led rgb? non intendo cambiare colore subito, ma passare da un colore ad un altro passando attraverso altre tonalità!
questo è lo sketch

#include <IRremote.h>

int RECV_PIN = A3;

int red1 = 13; //pin per il led rosso
int green1 = 12; //pin per il led verde
int blue1 = 11; //pin per il led blu
int red2 = 10;
int green2 = 9;
int blue2 = 8;
int red3 = 7;
int green3 = 6;
int blue3 = 5;

IRrecv irrecv(RECV_PIN);

decode_results results;


void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // ricezione

  //impostazione pin come uscita
  pinMode(red1, OUTPUT);
  pinMode(green1, OUTPUT);
  pinMode(blue1, OUTPUT);
  pinMode(red2, OUTPUT);
  pinMode(green2, OUTPUT);
  pinMode(blue2, OUTPUT);
  pinMode(red3, OUTPUT);
  pinMode(green3, OUTPUT);
  pinMode(blue3, OUTPUT);
  pinMode (RECV_PIN, INPUT);

   digitalWrite(red1,LOW);
      digitalWrite(green1,LOW);
      digitalWrite(blue1,LOW);
      // secondo led
      digitalWrite(red2,LOW);
      digitalWrite(green2,LOW);
      digitalWrite(blue2,LOW);
      // terzo led
      digitalWrite(red3,LOW);
      digitalWrite(green3,LOW);
      digitalWrite(blue3,LOW);
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  
  if (irrecv.decode(&results)) {

    if (results.value == 0xB5210DA6) {  // giallo

      analogWrite(red1,255);
      analogWrite(green1,180);
      analogWrite(blue1,0);
      // secondo led
      analogWrite(red2,255);
      analogWrite(green2,180);
      analogWrite(blue2,0);
      // terzo led
      analogWrite(red3,255);
      analogWrite(green3,180);
      analogWrite(blue3,0);
    }
    

    if (results.value == 0xE13DDA28) {    // bianco

      analogWrite(red1,255);
      analogWrite(green1,255);
      analogWrite(blue1,255);
      // secondo led
      analogWrite(red2,200);
      analogWrite(green2,200);
      analogWrite(blue2,200);
      // terzo led
      analogWrite(red3,200);
      analogWrite(green3,200);
      analogWrite(blue3,200);
    } 

    if (results.value == 0xDAEA83EC) {   // rosso

      analogWrite(red1,255);
      analogWrite(green1,0);
      analogWrite(blue1,0);
      // secondo led
      analogWrite(red2,200);
      analogWrite(green2,0);
      analogWrite(blue2,0);
      // terzo led
      analogWrite(red3,200);
      analogWrite(green3,0);
      analogWrite(blue3,0);
    }       

    if (results.value == 0x2BAFCEEC) {   // verde

      analogWrite(red1,0);
      analogWrite(green1,255);
      analogWrite(blue1,0);
      // secondo led
      analogWrite(red2,0);
      analogWrite(green2,200);
      analogWrite(blue2,0);
      // terzo led
      analogWrite(red3,0);
      analogWrite(green3,200);
      analogWrite(blue3,0);
    }

    if (results.value == 0x71A1FE88) {  // blu

      analogWrite(red1,0);
      analogWrite(green1,0);
      analogWrite(blue1,255);
      // secondo led
      analogWrite(red2,0);
      analogWrite(green2,0);
      analogWrite(blue2,200);
      // terzo led
      analogWrite(red3,0);
      analogWrite(green3,0);
      analogWrite(blue3,200);
    }
        if (results.value == 0x974F362) {  // spento

      digitalWrite(red1,LOW);
      digitalWrite(green1,LOW);
      digitalWrite(blue1,LOW);
      // secondo led
      digitalWrite(red2,LOW);
      digitalWrite(green2,LOW);
      digitalWrite(blue2,LOW);
      // terzo led
      digitalWrite(red3,LOW);
      digitalWrite(green3,LOW);
      digitalWrite(blue3,LOW);
    }

  }


}

grazie per le risposte

Ciao,
se cerchi "mood lamp" troverai un mondo di lampade rgb.
Per il cambio colore attraverso dissolvenze (spero si dica così), dovrai utilizzare del codice che passa da un valore pwm all'altro attraverso i valori dell'intervallo stesso.
Quindi se per esempio devi passare sul canale rosso da 100 a 200, potresti utilizzare un ciclo for passando per i valori intermedi.

ok e per farlo restare sempre in quel ciclo quando premo il tasto relativo a questa mod come faccio?

ciao

ok e per farlo restare sempre in quel ciclo quando premo il tasto relativo a questa mod come faccio?

non ho capito forse la domanda.
Vuoi fare in modo che se premi un pulsante, parta una serie di dissolvenze?

quando premo il tasto del telecomando mi entra in modalità "dissolvenza" e continui a cambiare i colori dovrei fare una sorta di loop nel loop! non sono molto ferrato nella programmazione il ciclo for sto cercando ora di capirlo un po XD

Ciao,

dovrei fare una sorta di loop nel loop! non sono molto ferrato nella programmazione il ciclo for sto cercando ora di capirlo un po

ecco, inizia a far fare la dissolvenza ad un led, poi passi all'rgb :stuck_out_tongue:
E usa google, che è tu amico.

Si trova tutto, come per esempio:
http://arduino.cc/en/Tutorial/Fading

il fade sono riuscito a farlo! ora vorrei integrarlo al mio programma ! come faccio a digli quando premo il tasto del telecomando entri in fade e quando ne premo un altro fai un'altra cosa?
per il fade ho usato questo

const int redPin = 11;
const int greenPin = 10;
const int bluePin = 9;

 
void setup() {
  // Start off with the LED off.
  setColourRgb(0,0,0);
}
 
void loop() {
  unsigned int rgbColour[3];
 
  // Start off with red.
  rgbColour[0] = 255;
  rgbColour[1] = 0;
  rgbColour[2] = 0;  
 
  // Choose the colours to increment and decrement.
  for (int decColour = 0; decColour < 3; decColour += 1) {
    int incColour = decColour == 2 ? 0 : decColour + 1;
 
    // cross-fade the two colours.
    for(int i = 0; i < 255; i += 1) {
      rgbColour[decColour] -= 1;
      rgbColour[incColour] += 1;
      
      setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
      delay(5);
    }
  }
}
 
void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
 }

Arduino UNO ha solo 6 Uscite PWM di cui 2 non puoi usarli quando usi la libreria IRremote perch usano in comune un timer.
Non puoi regolare 3 LED RGB indipendentemente.

Ciao Uwe

e se volessi fare solo con un led?

Colleghi i 3 RGB per ogni colore in paralello. Ogni LED deve avere le sue resistenze che limitano la corrente.
Ti servono 3 tansistori per poterli pilotare in contemporanea.
Ciao Uwe

il mio problema è a livetto software! come faccio con un telecomando a spegnere il led? non riesco a fare questo

La logica è: dentro al loop che fa il fading devi mettere una lettura del telecomando.
Il codice lo devi però scrivere te :wink: