I have a remote control from an air conditioner I need to clone. When I depress the remote, the MEGA2650 with the IR receiver goes crazy, throwing lines of hexcode everywhere.
The remote is a little bit exotic. We're confident that it's because the remote is sending packets too wide/big.
How do you adjust the IR receiver frame buffer size?
Code:
#define sprint Serial.print
#define sprintln Serial.println
#include <IRremote.h>
#define IR_RCVR_PIN 7
IRrecv ir_receiver(IR_RCVR_PIN);
decode_results results;
void setup() {
Serial.begin(115200);
ir_receiver.enableIRIn(); // Start the receiver
}
void loop() {
if (ir_receiver.decode(&results)) {
dump(&results);
ir_receiver.resume(); // Receive the next value
}
}
int c = 1;
void dump(decode_results *results) {
int count = results->rawlen;
sprintln(c);
c++;
sprintln("For IR Scope: ");
for (int i = 1; i < count; i++) {
sprint("0x");
sprint((unsigned int)results->rawbuf[i], HEX);
sprint(" ");
}
sprintln("");
sprintln("For Arduino sketch: ");
sprint("unsigned int raw[");
sprint(count, DEC);
sprint("] = {");
for (int i = 1; i < count; i++) {
sprint("0x");
sprint((unsigned int)results->rawbuf[i], HEX);
sprint(",");
}
sprint("};");
sprintln("");
sprint("irsend.sendRaw(raw,");
sprint(count, DEC);
sprint(",38);");
sprintln("");
sprintln("");
}
Wild output:
0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xA 0xC 0xB 0xB 0x21 0xB 0x21 0xB 0x22 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xC 0xB 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x22 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0x22 0xA 0x22 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB
For Arduino sketch:
unsigned int raw[201] = {0xB2,0x59,0xB,0x21,0xB,0x22,0xB,0xA,0xC,0xA,0xB,0xC,0xA,0xB,0xB,0x22,0xB,0x21,0xB,0x22,0xB,0x21,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xA,0xC,0xB,0xB,0xA,0xC,0xB,0xB,0x21,0xB,0x21,0xB,0x22,0xB,0xB,0xB,0xA,0xC,0xB,0xB,0xB,0xB,0xA,0xC,0xA,0xC,0xB,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x22,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xA,0xC,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0x22,0xA,0x22,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,};
irsend.sendRaw(raw,201,38);
68
For IR Scope:
0xB2 0x59 0xB 0x21 0xB 0x22 0xB 0xA 0xC 0xA 0xB 0xC 0xA 0xB 0xB 0x22 0xB 0x21 0xB 0x22 0xB 0x21 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xA 0xC 0xB 0xB 0x21 0xB 0x21 0xB 0x22 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xC 0xB 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x22 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0x22 0xA 0x22 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB
For Arduino sketch:
unsigned int raw[201] = {0xB2,0x59,0xB,0x21,0xB,0x22,0xB,0xA,0xC,0xA,0xB,0xC,0xA,0xB,0xB,0x22,0xB,0x21,0xB,0x22,0xB,0x21,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xA,0xC,0xB,0xB,0xA,0xC,0xB,0xB,0x21,0xB,0x21,0xB,0x22,0xB,0xB,0xB,0xA,0xC,0xB,0xB,0xB,0xB,0xA,0xC,0xA,0xC,0xB,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x22,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xA,0xC,0xA,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0x22,0xA,0x22,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0xB,0x21,0xB,0xB,0xB,0xB,};
irsend.sendRaw(raw,201,38);
69
For IR Scope:
0xB2 0x59 0xB 0x21 0xB 0x22 0xB 0xA 0xC 0xA 0xB 0xC 0xA 0xB 0xB 0x22 0xB 0x21 0xB 0x22 0xB 0x21 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xA 0xC 0xB 0xB 0x21 0xB 0x21 0xB 0x22 0xB 0xB 0xB 0xA 0xC 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xC 0xB 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x22 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xA 0xC 0xA 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0x22 0xA 0x22 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0xB 0x21 0xB 0xB 0xB 0xB
For Arduino sketch:
unsigned int raw[201] = {0xB2,0x59,0xB,0x21,0xB,0x22,0xB,0xA,0xC,0xA,0xB,0xC,0xA,0xB,0xB,0x22,0xB,0x21,0xB,0x22,0xB,0x21,0xB
I have a remote control from an air conditioner I need to clone
From the IRremote Arduino Library's documentation
This library was never designed to handle long codes like the ones used by air conditioners.
See Recording long Infrared Remote control signals with Arduino. The main reason is, that it was designed to fit inside MCUs with relatively low levels of resources and was intended to work as a library together with other applications which also require some resources of the MCU to operate.
For long codes with more than 48 bits like from air conditioners, you can change the length of the input buffer in IRremote.h.
#define RAW_BUFFER_LENGTH 101 ///< Maximum length of raw duration buffer. Must be odd. Supports 48 bit codings.
Please read manuals!