martes, 18 de febrero de 2014

Utilización mando infrarrojos II: Control LED RGB

Tras haber leído los códigos de los botones de nuestro mando  (Utilización mando infrarrojos I: Lectura del código y ejemplo), podemos seguir avanzando nuestro estudio en el sensor de infrarrojos para ir más allá y ser capaces de controlar un LED RGB (Tutorial - Led RBG con pulsadores).





Para ello necesitaremos los siguientes componentes:

  •  Led RGB
  •  Sensor de infrarrojos + mando compatible
  •  4 resistencias 220Ω (una para cada color del led RGB y otra para el sensor de infrarrojos)
  •  Protoboard
  •  Cables



El sketch que utilizaremos en este caso será el siguiente:

#include <WProgram.h>
#include <NECIRrcv.h> //Libreria del protocolo NEC
#define IRPIN 8 // Pin del receptor IR
NECIRrcv ir(IRPIN);

int rojo = 13;  //Pin del color rojo del led RGB
int verde = 12; //Pin del color verde del led RGB
int azul = 11; //Pin del color azul del led RGB

//power = 4228087680;  //Codigo correspondiente al boton POWER del mando a distancia
//butrojo = 4161240960; //Codigo correspondiente al boton 1 del mando a distancia
//butverde = 4194664320; //Codigo correspondiente al boton 2 del mando a distancia
//butazul = 4177952640; //Codigo correspondiente al boton 3 del mando a distancia

void setup()
{
  //Serial.begin(9600); //Iniciamos comunicacion serie
  ir.begin(); //Iniciamos la recepcion IR

  pinMode(rojo, OUTPUT);
  pinMode(verde,OUTPUT);
  pinMode(azul, OUTPUT);
}

void loop()
{
  unsigned long ircode; //Variable que contendra el codigo decimal del boton pulsado
  while (ir.available()) 
  {
    ircode = ir.read(); //Leemos el codigo del boton pulsado

     if (ircode == power) //Si el boton de power... apagamos el led
     {
       digitalWrite(rojo, LOW);
       digitalWrite(verde, LOW);
       digitalWrite(azul, LOW);
     }
     else if (ircode == butrojo) digitalWrite(rojo,HIGH);  //Si boton 1, encendemos color rojo
     else if (ircode == butverde) digitalWrite(verde,HIGH); //Si boton 2, encendemos color verde
     else if (ircode == butazul) digitalWrite(azul,HIGH); //Si boton 3, encendemos color azul
  }
}

Aclaración: destacar que una patilla del RGB se encuentra en el pin 13, el cual ya lleva internamente incorporado una resistencia que impide que el led se deteriore. El dibujo es genérico por si se deseara utilizarlo con otros pines.

Si observamos el sketch, podemos observar como para cada botón del mando, tenemos asociado un código que emplearemos en las condiciones.

Finalmente, el resultado obtenido puede mostrarse en el siguiente vídeo:



Y esto es todo. No dudéis en comentar y en preguntar cualquier duda.
Gracias por la atención.

I.