Leer y enviar códigos de mandos infrarrojos

          El montaje es muy simple. Un diodo lector de IR de 3 pines, un diodo emisor un botón y dos resistencia.
         
          Cableado en una placa de tiras con la medida de ancho y posición de pines para "pincharse" directamente en un Arduino Uno. Los pines de la izquierda van a los dos negativos y al positivo del Uno y los de la derecha al pin 3 (salida de señal IR), al pin 4 (botón) y pin 5 lector de IR del mando a analizar.

#include <IRremote.h> // Compilado con version v3.5.0
                                          
#define PIN_RECV 5  //Recibe codigos
#define PIN_SEND 3  //Al LED IR emisor
int BotonEnviar = 4;  //Botón para enviar código recibido
int EstadoBoton;
uint8_t sRepeats = 0;
unsigned long daProtocol;
unsigned long daAddress;
unsigned long daCommand;
unsigned long daRawData;
String SdaCommand;
String SdaRawData;

void setup()  { 
  Serial.begin(115200);
  delay(500);
  Serial.println(F("\r\nVersión librería cargada " VERSION_IRREMOTE));
  IrSender.begin(PIN_SEND, false); // Initialise the IR sender
  IrReceiver.begin(PIN_RECV, true); // Initializes the IR receiver
  Serial.println("--Pulse botón del mando remoto para recibir código");
  Serial.println("--Pulse botón del montaje para reproducirlo");
  Serial.println();



void loop(){
  if (IrReceiver.decode()) {
    IrReceiver.printIRResultShort(&Serial); // Prints a summary of the received data
    // Output the raw data (helps learn your particular remote)
   // Output the results as uint16_t source code array of micros
   // IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, true);

   daRawData = (IrReceiver.decodedIRData.decodedRawData);
   if (daRawData > 0 ){  //Evita falsas capturas
     Serial.println(IrReceiver.decodedIRData.protocol); Serial.println(IrReceiver.decodedIRData.address, HEX);
     Serial.println(IrReceiver.decodedIRData.command, HEX); Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);  
     daProtocol = (IrReceiver.decodedIRData.protocol); daAddress = (IrReceiver.decodedIRData.address);
     daCommand = (IrReceiver.decodedIRData.command); //daRawData = (IrReceiver.decodedIRData.decodedRawData);   
     Serial.println("---------------------------------------------------------------------------------------");
     Serial.println("Pulse el botón del montaje para enviar el código y reactivar las capturas");
     IrReceiver.stop();
   }      
   Serial.println("---------------------------------------------------------------------------------------");
   Serial.flush();
   IrReceiver.resume(); // Receibe la próxima señal IR
   delay(100);
   }  
  
   EstadoBoton = digitalRead(BotonEnviar); // Botón es activo HIGH   
   if (EstadoBoton == HIGH) {
     Serial.print("Transmitido codigo: "); Serial.println(daRawData, HEX);
     Serial.println("---------------------------------------------------------------------------------------");    
     switch (daProtocol){ 
      case 6:
       IrSender.sendLG(daRawData,daCommand,sRepeats);
       break;              
      case 8:
       IrSender.sendNEC(daRawData,daCommand,sRepeats);
       break;
      case 9:
       IrSender.sendPanasonic(daRawData,daCommand,sRepeats);
       break;      
      case 11:
       IrSender.sendKaseikyo_JVC(daRawData,daCommand,sRepeats);
       break;     
      case 13:
       IrSender.sendKaseikyo_Sharp(daRawData,daCommand,sRepeats);
       break; 
      case 14:
       IrSender.sendKaseikyo_Mitsubishi(daRawData,daCommand,sRepeats);
       break;                   
      case 15:
       IrSender.sendRC5(daRawData,daCommand,sRepeats);
       break;
      case 16:
       IrSender.sendRC6(daRawData,daCommand,sRepeats);
       break;            
     case 17:
       IrSender.sendSamsung(daRawData,daCommand,sRepeats);
       break;
      case 18:
       IrSender.sendSharp(daRawData,daCommand,sRepeats);
       break;
      case 19:
       IrSender.sendSony(daRawData,daCommand,3);
       break;          
      case 20:
       IrSender.sendOnkyo(daRawData,daCommand,sRepeats);
       break;
      case 21:
       IrSender.sendApple(daRawData,daCommand,sRepeats);
       break;                  
      default:
      break;
    }
    Serial.println("Pulse un botón del mando remoto para nueva captura"); 
    Serial.println("---------------------------------------------------------------------------------------"); 
    IrReceiver.start();
    delay(200);  //Evita falsas lecturas por rebotes del botón
   }  
}
He simplificado el código al máximo. Funciona de forma alterna; recibir código y pulsar el botón para enviarlo y recibir otro.
Menu