My code:
/*
* Remote Control A RGB LED
* Example of how to make the color and brightness of an RGB led vary with a remote control.
* This project utilizes a 38kHz IR reciever from RadioShack -
* Author: Jose Daniel Herrera
* Modified by: Evan Johnson
* Date Created: 08/28/2012
* Date Modified: 12/11/2012
* http://arduino-guay.blogspot.com.es
*/
#include <IRremote.h>
int RECV_PIN = 8;
int R_PIN = 9;
int G_PIN = 6;
int B_PIN = 10;
//Define these descriptions to the value displayed in serial monitor for which you want them to match up.
//Try Sony TV protocol first which is decimal, not hexidecimal like shown here.
//#define ON 0X
#define OFF 0xA90
#define BRIGHTNESS_UP 0x490 //volume up
#define BRIGHTNESS_DOWN 0xC90 //volume down
//#define FLASH 0x
//#define STROBE 0x
//#define FADE 0x
//#define SMOOTH 0x
#define RED 0x10 //BUTTON 1
#define GREEN 0X810 //BUTTON 2
#define BLUE 0x410 //BUTTON 3
#define WHITE 0xC10 //BUTTON 4
#define ORANGE 0x210 //BUTTON 5
#define YELLOW_DARK 0xA10 //BUTTON 6
#define YELLOW_MEDIUM 0x610 //BUTTON 7
#define YELLOW_LIGHT 0xE10 //BUTTON 8
#define GREEN_LIGHT 0X110 //BUTTON 9
#define GREEN_BLUE1 0X910 //BUTTON 0
#define GREEN_BLUE2 0X5CE9 //PERIOD (.)
#define GREEN_BLUE3 0XD10 //ENT
#define BLUE_RED 0X90 //CHANNEL +
#define PURPLE_DARK 0X890 //CHANNEL -
#define PURPLE_LIGHT 0X290 //MUTING
#define PINK 0XDD0 //RECALL
#define INCREMENT 10
unsigned long rgb = 0;
byte r,g,b;
IRrecv irrecv(RECV_PIN);
decode_results results;
//*******************************************************
//*******************************************************
void setup()
{
irrecv.enableIRIn(); // Inicializamos el receptor
Serial.begin(9600);
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
pinMode(RECV_PIN, INPUT);
}
//*******************************************************
//*******************************************************
void loop()
{
//if there is input to decode from the remote control
if (irrecv.decode(&results))
{
//if the frequency is not high (high signal means no remote pulling down frequency)
if (results.value != 0xFFFFFFFF)
{
// see which button was pressed on the remote
switch (results.value)
{
//user pressed volume +
case BRIGHTNESS_UP :
vary (&r, INCREMENT);
vary (&g, INCREMENT);
vary (&b, INCREMENT);
break;
//user pressed volume -
case BRIGHTNESS_DOWN :
vary (&r, -INCREMENT);
vary (&g, -INCREMENT);
vary (&b, -INCREMENT);
break;
//user pressed on/off button
case OFF :
r = g = b = 0;
break;
case RED : RGB(0x00FF0000); break;
case GREEN : RGB(0x0000FF00); break;
case BLUE : RGB(0x000000FF); break;
case WHITE : RGB(0x00FFFFFF); break;
case ORANGE : RGB(0x00FF0A00); break; //FF->0A
case YELLOW_DARK : RGB(0x00FFAA00); break;
case YELLOW_MEDIUM : RGB(0x00FFD400); break;
case YELLOW_LIGHT : RGB(0x00FFFF00); break;
case GREEN_LIGHT : RGB(0x0000FFAA); break;
case GREEN_BLUE1 : RGB(0x00000AFF); break; //FF->0A
case GREEN_BLUE2 : RGB(0x0000AAFF); break;
case GREEN_BLUE3 : RGB(0x000055FF); break;
case BLUE_RED : RGB(0x00000080); break;
case PURPLE_DARK : RGB(0x003F0080); break;
case PURPLE_LIGHT : RGB(0x007A00BF); break;
case PINK : RGB(0x00FF00FF); break;
}
//Print report to serial monitor
Serial.print("Result frequency of remote button pressed: ");
Serial.println(results.value, HEX);
Serial.print("Red Value: ");
Serial.println(r,DEC);
Serial.print("Green Value: ");
Serial.println(g, DEC);
Serial.print("Blue Value: ");
Serial.println(b, DEC);
//Write byte values to RGB led
analogWrite(R_PIN,r);
analogWrite(G_PIN,g);
analogWrite(B_PIN,b);
}
// Receive the next value
irrecv.resume();
}
}
//**********************************************************
//**********************************************************
//1) vary the led's color based by INCREMENT value of 10
void vary (byte* color, char value) {
if (value > 0) {
if ( *color + value <= 255) {
*color += value;
} else {
*color = 255;
}
} else {
if (*color + value >= 0) {
*color += value;
} else {
*color = 0;
}
}
}
//******************************************
void RGB(unsigned long value) {
r = value >> 16;
g = (value >> 8) & 0xFF;
b = value & 0xFF;
}