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.