7 de julho de 2012

LEDs RGB

E aí, pessoal!
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