如何增加红外接收器的帧缓冲大小?



我有一个需要克隆的空调遥控器。当我按下遥控器时,带有红外接收器的MEGA2650就会发疯,到处乱扔十六进制代码。

遥控器有点异域风情。我们确信这是因为远程发送的数据包太宽/太大。

如何调整红外接收帧缓冲区大小?

代码:

#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("");
}

野生输出:

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

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

对于IR范围:

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

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

对于IR范围:

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

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

我有一个来自空调的遥控器我需要克隆

来自IRremote Arduino Library的文档

处理未知协议

这个库是,从来没有设计用来处理像这样的长代码用于空调.

参见记录长红外遥控信号Arduino。主要原因是,它被设计成适合在mcu与相对较低的资源水平,并打算作为一个库与其他应用程序一起也需要一些

提示

对于大于48位的长码,例如来自空调的长码可以在IRremote.h中修改输入缓冲区的长度。

https://github.com/Arduino-IRremote/Arduino-IRremote/blob/c0f75685de63d211bad780816b691655df45d7e1/src/IRremote.h L36

#define RAW_BUFFER_LENGTH  101  ///< Maximum length of raw duration buffer. Must be odd. Supports 48 bit codings.

请阅读手册!

对于我们来说,造成差异的是

Arduino 图书馆 IRremote src IRremoteInt.h#38 "#define RAW_BUFFER_LENGTH 100"在比;#define RAW_BUFFER_LENGTH 220;

最新更新