TSOP 1738 e TSOP 31238

Per le differenze tra i due ricevitori puoi confrontare i relativi datasheet: TSOP1738, TSOP31238.

Un altro esempio di utilizzo può essere questo:

immagine schema
dove
R1: 10K[ch937]
R2, R3: 220[ch937]

Sketch:

/*
 * Controllo di due led tramite telecomando IR.
 */

#include <IRremote.h>

int RECV_PIN = 3;         //Pin su cui è connesso il ricevitore IR
int RED_LED_PIN = 9;      //Pin del led rosso
int GREEN_LED_PIN = 8;    //Pin del led verde
int BUTTON_PIN = 2;       //Pin del bottone

int STATUS_RED = LOW;     //Stato del led rosso
int STATUS_GREEN = LOW;   //Stato del led verde

int RED_IR_CODE = 0xFFFF9867;  //Codice per comandare il led rosso
int GREEN_IR_CODE = 0x58A7;    //Codice per comandare il led verde

IRrecv irrecv(RECV_PIN);   //Inizializza il pin del ricevitore IR

decode_results results;    //Comando ricevuto dal ricevitore IR

/*
 * Switcha lo stato "ledStatus" del led "ledpin", "count" volte,
 * con una pausa, tra uno stato ed il successivo, "pause" millisecondi.
 * Ritorna l'ultimo stato del led.
 */
int blinkled(int ledpin, int count, int ledStatus, int pause){
  for (; count > 0; --count){
    if(ledStatus == LOW)
      ledStatus = HIGH;
    else
      ledStatus = LOW;
    digitalWrite(ledpin, ledStatus);
    delay(pause);
 }
  return ledStatus;
}

void setup()
{
  Serial.begin(9600);
  
  //Impostazione modalità dei pin
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);
  
  //Blink dei led
  STATUS_RED = blinkled(RED_LED_PIN, 14, LOW, 50);
  STATUS_GREEN = blinkled(GREEN_LED_PIN, 14, LOW, 50);
  
  //Avvio della ricezione IR
  irrecv.enableIRIn();
}

/*
 * Riceve e ritorna il codice IR da associare al led "ledpin".
 */
int recIRCode(int ledpin){
  int code = 0;    //Codice ricevuto dal ricevitore IR
  int statusLed;   //Stato del led
  
  //Accende il led ed esegue un blink
  statusLed = blinkled(ledpin, 1, LOW, 0);
  statusLed = blinkled(ledpin, 4, statusLed, 50);
  
  while(code == 0)  //Fin quando il codice ricevuto non è valido (0)
   if (irrecv.decode(&results)){  //Riceve e decodifica il codice IR
     //Se il codice è decodificabile dalla libreria ed il codice non è quello di REPEAT
     if (results.decode_type != -1 && results.value != REPEAT){
      code = results.value;        //Codice ricevuto
      Serial.print("rec code: ");
      Serial.print(code, HEX);
      Serial.print(" -> pin ");
      Serial.println(ledpin);
      statusLed = blinkled(ledpin, 5, statusLed, 50);  //Blink del led
     }
     irrecv.resume(); //Riceve il valore successivo dall'IR
   }
  statusLed = blinkled(ledpin, 1, HIGH, 0);  //Spegne il led
  return code;  //Ritorna il codice ricevuto
}

void loop() {
  int code;        //Codice IR ricevuto
  
  //Se il pulsante di registrazione dei codice è stato premuto...
  if (digitalRead(BUTTON_PIN) == HIGH){
    //Spegne i led
    STATUS_RED = blinkled(RED_LED_PIN, 1, HIGH, 0);
    STATUS_GREEN = blinkled(GREEN_LED_PIN, 1, HIGH, 0);
    //Rivece e memorizza i codici per il led rosso e verde
    RED_IR_CODE = recIRCode(RED_LED_PIN);
    GREEN_IR_CODE = recIRCode(GREEN_LED_PIN);
  }
  //Se è disponibile un segnale IR
  if (irrecv.decode(&results)) {
    code = results.value;        //Memorizza il codice ricevuto
    Serial.print(code, HEX);
    if (code == REPEAT)          //Codice relativo ad un bottone non ancora rilasciato
      Serial.print(" [repeat code]");
    if (code == RED_IR_CODE){    //Codice associato al led rosso
      Serial.print(": switch red led : pin ");
      Serial.print(RED_LED_PIN);
      STATUS_RED =  blinkled(RED_LED_PIN, 1, STATUS_RED, 0);  //Switcha lo stato del led rosso
    }
    //senza else consente di usare un bottone per più led
    if (code == GREEN_IR_CODE){  //Codice associato al led verde
      Serial.print(": switch green led : pin ");
      Serial.print(GREEN_LED_PIN);
      STATUS_GREEN = blinkled(GREEN_LED_PIN, 1, STATUS_GREEN, 0); //Switcha lo stato del led verde
    }
    if(results.decode_type == -1){  //Codice non decodificabile dalla libreria
      //Mostra il codice raw su serial
      unsigned int rawCodes[RAWBUF]; 
      Serial.println(": UNKNOW code");
      Serial.print("\traw len: ");
      Serial.print(results.rawlen);
      Serial.print("\n\traw buf: ");
      int codeLen = results.rawlen - 1;
      for (int i = 1; i <= codeLen; i++) {
        if (i % 2) {
          // Mark
          rawCodes[i - 1] = results.rawbuf[i]*USECPERTICK - MARK_EXCESS;
          Serial.print(" m");
        } 
        else {
          // Space
          rawCodes[i - 1] = results.rawbuf[i]*USECPERTICK + MARK_EXCESS;
          Serial.print(" s");
        }
        Serial.print(rawCodes[i - 1], DEC);
       }
       Serial.println("");
    }
    irrecv.resume(); //Riceve il prossimo valore IR
    Serial.println();
  }
}

Il bottone è usato per avviare le associazioni dei tasti del telecomando ai led.
E' possibile associare anche lo stesso tasto ad entrambi i led.