Problema sensor IR

He cargado la librería IRremote correctamente y cargado en el arduino, leido los códigos de mi mando pero a la hora de utilizarlos algo falla en la comunicación. Pulso el botón asignado del mando, aparece el valor en el Serial Monitor(para el botón 9 unas veces 9 y otras 809) pero no se enciende el led que yo asigné que se encendiera con ese valor.

No hay problemas en cuanto al hardware ni con las librerías todo está en orden, ¿Qué puede pasar? Os dejo los dos programas que he utilizado tanto para leer los códigos, como para encender un LED al recibir X código.

Código para decodificar:

#include <IRremote.h>

int RECV_PIN = 8;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  } 
  else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");
  } 
  else if (results->decode_type == SONY) {
    Serial.print("Decoded SONY: ");
  } 
  else if (results->decode_type == RC5) {
    Serial.print("Decoded RC5: ");
  } 
  else if (results->decode_type == RC6) {
    Serial.print("Decoded RC6: ");
  }
  else if (results->decode_type == PANASONIC) { 
    Serial.print("Decoded PANASONIC - Address: ");
    Serial.print(results->panasonicAddress,HEX);
    Serial.print(" Value: ");
  }
  else if (results->decode_type == JVC) {
     Serial.print("Decoded JVC: ");
  }
  Serial.print(results->value, HEX);
  Serial.print(" (");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}


void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}

CODIGO ENCENDER LED CON UN VALOR:

#include <IRremote.h>

int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
 Serial.begin(9600);
 irrecv.enableIRIn(); // Comienza a recibir
 pinMode(13,OUTPUT);
}

void loop() {
 if (irrecv.decode(&results)) {
 int lectura = results.value;

 Serial.println(lectura, HEX);

 //lee el código que llega a través del receptor IR y lo imprime en el serial.
 if(lectura == 9){ //este es el código que debeis copiar del serial.
 digitalWrite(13,HIGH); 
 delay(1000);

 }
 irrecv.resume(); // Recibe el siguiente valor
 }
}

PD: El código obtenido originalmente está en RC5.

Y que es lo que sale en el Serial? puedo ver?


Por cierto te falto apagar el led antes de salir del if

 if(lectura == 9){ //este es el código que debeis copiar del serial.
 digitalWrite(13,HIGH); 
 delay(1000);
 digitalWrite(13,LOW);

 }

Ahí está, le he dado varias veces. Varía entre 9 y 809.

Serial monitor.JPG

La variación de la que hablas es normal. Sirve para distinguir nueva pulsación de tecla. Es decir, si mantienes apretada la tecla 09, aparecerá 09 09 09 09 09, pero si la pulsas repetidamente aparecerá 09 809 09 809.

Ya veo,

Pero en el Serial noto algo que esta mal, creo.

Los datos no parecen ser del tipo HEX, como pides que haga Serial.println(lectura,HEX); yo creo que la variable “int lectura” le queda chica a los valores de results.value, lo digo por los códigos que he visto:

Here are the codes that I got for the white remote. FFFFFF is a repeat command, you'll get a stream of them if you hold down a button.

PWR       FF629D     
CH          FFE21D        
|<<          FF22DD  
>|            FFC23D              
>>|          FF02FD               
-              FFE01F 
Plus        FFA857         
EQ          FF906F          
0             FF6897            
100         FF9867           
200         FFB04F           
1             FF30CF                 
2             FF18E7                 
3             FF7A85                  
4             FF10EF                   
5             FF38C7                    
6             FF5AA5                  
7             FF42BD                  
8             FF48B5             
9             FF52AD 

and here are the codes I got from the black remote.

PWR                               FD00FF
VOL                                FD807F
FUNC/STOP                    FD40BF
|<<                                   FD20DF
>|                                     FDA05F
>>|                                   FD609F
DOWN                             FD10EF
VOL                                 FD906F
UP                                   FD50AF
0                                      FD30CF
EQ                                   FDB04F
ST/REPT                         FD708F
1                                      FD08F7
2                                      FD8877
3                                      FD48B7
4                                      FD28D7
5                                      FDA857
6                                      FD6897
7                                      FD18E7
8                                      FD9867
9                                      FD58A7

Cambia el loop de tu sketch por el original, y mira los códigos, mapea cada tecla y después carga un nuevo loop condicionando según los códigos de tu control remoto.

Codigos:http://www.instructables.com/id/Arduino-Infrared-Remote-tutorial/6/?lang=es