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!!