Proyecto IR no funciona bien

Hola a todos,

Necesito vuestra ayuda en un proyecto con IR. El proyecto consiste en un servo con un laser atornillado encima. Tengo un mado IR pero cuuando normalmente al apretar “OK” se tendria que encender el laser el servo se mueve a la izquierda y eso lo tendria que hacer al apretar la flecha izquierda. He probado todos los botones y comprobado todo el codigo y no encuentro nada. Os pongo el codigo abajo por si algien lo necesita. Por cierto uso Arduino Uno.

Agradezco cualquier ayuda por favor,

#include <IRremote.h>
int laser = 0;
const int irReceiverPin = 2;
IRrecv irrecv(irReceiverPin);
decode_results results;
#include <Servo.h>
Servo myservo;
int pos = 0;  
void setup() 
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(13, OUTPUT);
myservo.attach(9);
}

void loop()
{
if (irrecv.decode(&results))
 {
  if (results.value == 0xFF02FD) //OK
  {Laser();}
  if (results.value == 0xFF22DD) //Izquierda
  {IzquierdaServo();}
  if (results.value == 0xFFC23D) //Derecha
  {DerechaServo();}
  irrecv.resume();
 }
}

void DerechaServo()
{ 
 pos=pos-15; 
 myservo.write(pos);
}

void IzquierdaServo()
{
pos=pos+15;
myservo.write(pos);  
}

void Laser()
{
  if (laser == 0)
  {
    digitalWrite (13, HIGH);
    laser=1;
  }
  else
  {
    digitalWrite (13, LOW);
    laser=0;
  }
}

Moderador: Código agregado

Laser_Control_Remoto.ino (786 Bytes)

Y como lees el IR ? en que pin lo pusiste y como ?

Hola Pablo!
Primero yo te recomendaría que coloques un Serial.print para ver los códigos que recibes por lo menos en la etapa de prueba de tu proyecto.
Por otro lado probaría usar el comando switch case antes que tantos if.
Yo probaría algo así:

#include <IRremote.h>
int laser = 0;
const int irReceiverPin = 2;
IRrecv irrecv(irReceiverPin);
decode_results results;
#include <Servo.h>
Servo myservo;
int pos = 0;  
void setup() 
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(13, OUTPUT);
myservo.attach(9);
}

void loop()
{
if (irrecv.decode(&results))
 {
  Serial.print("0x"); //macro para ver código por comunicación serial
  Serial.println(results.value, HEX);
  switch (results.value) //la variable CodigoTecla como switch
 {
  case 0xFF02FD: //OK
  Laser();
  break;
  case 0xFF22DD: //Izquierda
  IzquierdaServo();
  break;
  case 0xFFC23D: //Derecha
  DerechaServo();
  break;
  }
  irrecv.resume();
 }
}

void DerechaServo()
{ 
 pos=pos-15; 
 myservo.write(pos);
}

void IzquierdaServo()
{
pos=pos+15;
myservo.write(pos);  
}

void Laser()
{
  if (laser == 0)
  {
    digitalWrite (13, HIGH);
    laser=1;
  }
  else
  {
    digitalWrite (13, LOW);
    laser=0;
  }
}

Saludos!!

yo lo que haría sería poner en otro arduino un lector ir y confirmar los códigos que se están enviando,