7 de julho de 2012

LEDs RGB

Um efeito bacana com dois Leds RGB.

Coloquei um pequeno intervalo de tempo entre as transições de cores em cada led para tentar criar um efeito de fade. O circuito é composto apenas por seis resistores de 220 ohms, dois LEDs RGB (catodo comum), e um circuito Arduino.

Segue o diagrama e o código fonte:
 
/*--------------
 LED RGB
 FELLIPE COUTO
 07/07/2012
 --------------*/
#define Red1 3
#define Red2 9
#define Green1 5
#define Green2 10
#define Blue1 6
#define Blue2 11

int RedOld = 0;
int GreenOld = 0;
int BlueOld = 0;
int RedOld2 = 0;
int GreenOld2 = 0;
int BlueOld2 = 0;

void setup(){
  pinMode(Red1, OUTPUT);
  pinMode(Red2, OUTPUT);
  pinMode(Green1, OUTPUT);
  pinMode(Green2, OUTPUT);
  pinMode(Blue1, OUTPUT);
  pinMode(Blue2, OUTPUT);
  randomSeed(analogRead(0)); //Para o random não repetir a sequencia.
  Pisca();
}

void loop(){
  Pisca();
  SequenciaRapida();
  SequenciaAleatoria();
}

void SequenciaAleatoria(){
  for (int i=0; i<15; i++){
    CoresRGB(random(7) + 1, random(250) + 50); //fade = 50 a 299.
    delay(40000);
  }
}

void SequenciaRapida(){
  for (int j=0; j<3; j++){
    for (int i=1; i<=7; i++){
      CoresRGB(i, 10);
      delay(2000);
    }
  }
}

void Pisca(){
  for (int i=1; i<=30; i++){
    CoresRGB(random(8), 0);
    delay(random(150));
  }
}

void CoresRGB(int cor, int fade){
  /*
   0- APAGADO
   1- VERMELHO
   2- VERDE
   3- AZUL 
   4- VERMELHO+AZUL
   5- VERDE+AZUL
   6- VERMELHO+VERDE
   7- VERMELHO+VERDE+AZUL
   */

  for (int i=0; i<=365; i++){
    /* -- LED 1 -- */
    switch(cor){
    case 0:
      RedOld--;
      GreenOld--;
      BlueOld--;
      break;

    case 1:
      RedOld++;
      GreenOld--;
      BlueOld--;
      break;

    case 2:
      RedOld--;
      GreenOld++;
      BlueOld--;
      break;

    case 3:
      RedOld--;
      GreenOld--;
      BlueOld++;
      break;

    case 4:
      RedOld++;
      GreenOld--;
      BlueOld++;
      break;

    case 5:
      RedOld--;
      GreenOld++;
      BlueOld++;
      break;

    case 6:
      RedOld++;
      GreenOld++;
      BlueOld--;
      break;

    case 7:
      RedOld++;
      GreenOld++;
      BlueOld++;
      break;
    }

    if (RedOld > 255){
      RedOld = 255;
    }
    else if (RedOld < 0) {
      RedOld = 0; 
    }
    if (GreenOld > 255){
      GreenOld = 255;
    }
    else if (GreenOld < 0) {
      GreenOld = 0; 
    }
    if (BlueOld > 255){
      BlueOld = 255;
    }
    else if (BlueOld < 0) {
      BlueOld = 0; 
    }

    if (RedOld <= 255 && RedOld >= 0){
      analogWrite(Red1, RedOld);
    }
    if (GreenOld <= 255 && GreenOld >= 0){
      analogWrite(Green1, GreenOld);
    }
    if (BlueOld <= 255 && BlueOld >= 0){
      analogWrite(Blue1, BlueOld);
    }

    /* -- LED 2 -- */
    if (i >= 110){
      switch(cor){
      case 0:
        RedOld2--;
        GreenOld2--;
        BlueOld2--;
        break;

      case 1:
        RedOld2++;
        GreenOld2--;
        BlueOld2--;
        break;

      case 2:
        RedOld2--;
        GreenOld2++;
        BlueOld2--;
        break;

      case 3:
        RedOld2--;
        GreenOld2--;
        BlueOld2++;
        break;

      case 4:
        RedOld2++;
        GreenOld2--;
        BlueOld2++;
        break;

      case 5:
        RedOld2--;
        GreenOld2++;
        BlueOld2++;
        break;

      case 6:
        RedOld2++;
        GreenOld2++;
        BlueOld2--;
        break;

      case 7:
        RedOld2++;
        GreenOld2++;
        BlueOld2++;
        break;
      }

      if (RedOld2 > 255){
        RedOld2 = 255;
      }
      else if (RedOld2 < 0) {
        RedOld2 = 0; 
      }
      if (GreenOld2 > 255){
        GreenOld2 = 255;
      }
      else if (GreenOld2 < 0) {
        GreenOld2 = 0; 
      }
      if (BlueOld2 > 255){
        BlueOld2 = 255;
      }
      else if (BlueOld2 < 0) {
        BlueOld2 = 0; 
      }

      if (RedOld2 <= 255 && RedOld2 >= 0){
        analogWrite(Red2, RedOld2);
      }
      if (GreenOld2 <= 255 && GreenOld2 >= 0){
        analogWrite(Green2, GreenOld2);
      }
      if (BlueOld2 <= 255 && BlueOld2 >= 0){
        analogWrite(Blue2, BlueOld2);
      }
    }

    delay(fade);
  }
}

3 comentários:

  1. Agora sim da pra montar uma disco!!! :D

    ResponderExcluir
  2. Pai,adoreeeei!vou visitar seu blog direto agora!hahhaa parabéns.beijos laís

    ResponderExcluir