Adaptar mando infrarojo

Alguien me puede ayudar para adaptar un mando infrarojo a este codigo

#define data 2
#define clock 3
#define LATCH 4

/* Useful Constants */
// Tomados de <DateTime.h>
#define SECS_PER_MIN  (60UL)
#define SECS_PER_HOUR (3600UL)
 
/* Useful Macros for getting elapsed time */
#define numeroDeSegundos(_time_) (_time_ % SECS_PER_MIN)  
#define numeroDeMinutos(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN) 

const byte digito[10] = { B01111011, B00010010, B01100111, B00110111, B00011110, B00111101, B01111101, B00010011, B01111111, B00011111};
const byte IncrMinPin = 12;
const byte DecrMinPin = 10;
const byte StartCronPin = 11;


const byte Alarma = 8;


unsigned long StartTime = 0;
byte IncrementoMin = 0;
byte IncrementoMinLast = 0;

// declarar nuevo boton

byte DecrementoMin = 0;
byte DecrementoMinLast = 0;


byte StartCronometro = 0;
byte StartCronometroLast = 0;
unsigned long timeCronometro = 0;
unsigned long Cronometro        = 0;
unsigned long ComparoCronometro;
bool bStartTime = false;

void setup()
{
 Serial.begin(9600);
 Serial.println("Contador descendente");
 Serial.println("Incr.Minutos = sube de a 5 minutos");
 Serial.println("Start/Stop = controla cronómetro");
 pinMode(clock, OUTPUT); 
 pinMode(data , OUTPUT);
 pinMode(LATCH, OUTPUT);

 pinMode(11, INPUT);
 pinMode(12, INPUT);
 pinMode(10, INPUT);
 
 
 pinMode(8, OUTPUT);
 
 
 display(0);
}

void loop()



{
 IncrementoMinLast = IncrementoMin;
 IncrementoMin = digitalRead(IncrMinPin); 
 
 DecrementoMinLast = DecrementoMin;
 DecrementoMin = digitalRead(DecrMinPin);
 
 
     
 
 if ( IncrementoMin == HIGH && IncrementoMinLast == LOW){ 
 StartTime += 5;
 delay(200);//  LE AGREGUE ESTE DELAY PARA PODER APRECIAR BIEN EL INCREMENTO DE LA PROGRAMACION Y QUE NO SE NOS PASEN TAN RAPIDO LOS NUMEROS
 if (StartTime >= 60) // máximo 60 minutos. 
   StartTime = 60;          // Si esta mal cambiar por 60 min o el valor que desees
 time(StartTime*60);
 Serial.println(StartTime);
 Cronometro = (unsigned long) StartTime * 60UL; 
 }    

//  Segmento de codigo  para agregar otro boton


 if ( DecrementoMin == HIGH && DecrementoMinLast == LOW){ 
 StartTime -= 5;
 delay(200);//  LE AGREGUE ESTE DELAY PARA PODER APRECIAR BIEN EL INCREMENTO DE LA PROGRAMACION Y QUE NO SE NOS PASEN TAN RAPIDO LOS NUMEROS
 if (StartTime >= 60) // máximo 60 minutos. 
   StartTime = 0;          // Si esta mal cambiar por 60 min o el valor que desees
 time(StartTime*60);
 Serial.println(StartTime);
 Cronometro = (unsigned long) StartTime * 60UL; 
 }   
 
 
 



 StartCronometroLast = StartCronometro;
 StartCronometro = digitalRead(StartCronPin); 
 if( StartCronometro == HIGH && StartCronometroLast == LOW){
 bStartTime = !bStartTime; // Cada pulso cambia el estado de prendido a apagado.

 if (bStartTime) { // Si arranco, entoncer cargo contador descendente con valor StartTime
 Serial.print("Cronometro = ");
 Serial.println(Cronometro);
 ComparoCronometro = millis()+1000UL;
 }
 }

    if (bStartTime){ 
     if (ComparoCronometro  - millis()> 1000UL) {
     if (Cronometro > 0){
     Cronometro -= 1;
     ComparoCronometro = millis()+1000UL;
     time((unsigned int) Cronometro);
     
     if (Cronometro == 0){
       bStartTime = false;   
     }
      
     
     if (Cronometro <=0)
     {
     digitalWrite(Alarma,HIGH);
     delay(10000);
     digitalWrite(Alarma,LOW);
     }
     else
     {
     digitalWrite(Alarma,LOW);
     }  
  
     
   delay(100);
   

   
 }}} }   

void time(unsigned long val){  
  int minutos;
  Serial.print("Crono = ");
  Serial.print(Cronometro);
  Serial.print(" Time = ");
  Serial.print(val);
  Serial.print(" Min= ");

  if (val < 3600) 
   minutos = numeroDeMinutos(val);
  else 
     minutos = numeroDeMinutos(val)+60;

  Serial.print(minutos);
  Serial.print(" Seg= ");
  Serial.println(numeroDeSegundos(val));
  
  unsigned int presentoTime = minutos*100 + numeroDeSegundos(val);
  display(presentoTime);
}

void display(unsigned int numero)
{
 int miles = numero / 1000;
 numero %= 1000;
 int centenas = numero / 100;
 numero %= 100;
 int decenas = numero / 10;
 numero %= 10;
 int unidades = numero;


 digitalWrite(LATCH, LOW);
 shiftOut(data, clock, MSBFIRST, digito[unidades]);
 shiftOut(data, clock, MSBFIRST, digito[decenas]);
 shiftOut(data, clock, MSBFIRST, digito[centenas]); 
 shiftOut(data, clock, MSBFIRST, digito[miles]); 
 digitalWrite(LATCH, HIGH);
}

quisiera que los botones de IncrMinPin,DecrMinPin y StartCronPin pudieran ser manipulados por un mando infrarojo

ya hice la decodificacion hexadecimal del mando
ya probe un codigo de internet que utiliza la libreria NECIRrcv.h y funciono
este codigo del cual me base esta en este link http://electronicavm.net/2011/09/20/recepcion-ir-con-arduino-protocolo-nec/

este es el codigo que quiciera adaptar al anterior para poder manipular el cronometro a distancia
he intentado pero no he tenido resultados

#include <Arduino.h>
#include <NECIRrcv.h> //Libreria del protocolo NEC
#define IRPIN 8 // Pin del receptor IR

NECIRrcv ir(IRPIN);

int rojo = 9;  //Pin del color ROJO del led RGB
int verde = 10; //Pin del color VERDE del led RGB
int azul = 11; //Pin del color AZUL del led RGB

long power = 0xED12FB04;  //Codigo correspondiente al boton POWER del mando a distancia
long butrojo = 0xEE11FB04; //Codigo correspondiente al boton 1 del mando a distancia
long butverde = 0xF609FB04; //Codigo correspondiente al boton 2 del mando a distancia
long butazul = 0xF708FB04; //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
  }
}

Gracias

No se que ha pasado probe el programa que trae esta libreria para capturar el codigo de los botones del control y funciono; de hecho probe el codigo que subi anteriormente para encender el led rgb y todo normal y ahora que me siento a programar pareciera que la libreria a dejado de funcionar .... no entiendo alguien que me ayude gracias

Que mensaje de error te manda el IDE?

No se que paso pero como por arte de magia hoy volvio a funcionar,,,,,,

El hecho es que no hay error solo que no me mostraba los datos capturados del control en el momitor serial de arduinio, esas librerias son un problema, por lo menos en micaso tengo tres controles samsung y esa libreria no captura los codigos de esos controles pero si los de un control universal que tengo

La libreria que utilizo es NECIRrcv.h

esta es la conexion del sensor ir y funciona bien para interactuar con el mando infrarrojo y con el monitor serial para ver el funcionamiento del codigo, asi tambien se utilizo esta conexion para adquirir los codigos del control.

pero cuando le agrego esta conexion para probarla con el cronometro fisico se pierde la conexion del mando hacia el ir y el arduino

el cable azul es 5v
el cable cafe es tierra
el cable naranja es el data
el cable blanco es el clock
el cable verde es el latch

Ah sera que usas algún delay() y probablemente por ahí esta el problema. ¿puedes poner el código para ver que pasa? edit: Ya lo vi :P dejame checarlo y mas tarde te contesto.

Prueba esto a ver si te funciona. Es una funcion (sin libreria) que te lee la tecla del mando a distancia y te la almacena en una variable. Ya esa variable puedes usarla en el programa. Es cuestion de trastear la funcion y adaptarla a tu programa ---> http://forum.arduino.cc/index.php?topic=298138.0