Go Down

Topic: lampada led rgb (Read 1 time) previous topic - next topic

imagider

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
Code: [Select]

#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

pitusso

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.

imagider

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

pitusso

ciao

Quote
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?

imagider

#4
May 10, 2013, 11:51 am Last Edit: May 10, 2013, 01:35 pm by imagider Reason: 1
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

pitusso

Ciao,

Quote
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  :P
E usa google, che è tu amico.

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

imagider

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
Code: [Select]

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);
}

uwefed

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

imagider

e se volessi fare solo con un led?

uwefed

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

imagider

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

leo72

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

Go Up