我有两个 Arduino,我想将它们放入无线系统中,以将 IR 代码从房子的一个房间的手持遥控器中继到另一个房间的机顶盒。一个 Arduino 有一个 IR 解码器,它从手持遥控器解码密钥,然后将其发送到另一个 Arduino,该 Arduino 用一个 IR 发射器停在盒子前面。该系统部分工作正常。当我从检测器(到我的电脑)获取代码并手动(从我的电脑)发送到发射的 Arduino 时,它会正确控制盒子。但是当我尝试直接在 Arduinos 之间无线发送代码时,它就不太正常了。命令似乎没有正确中继,并且发出的 Arduino 无法控制 bx。
这是解码 Arduino 代码的样子。"myNumber" 持有 4 字节密钥:
myNumber.UL = results->value;
Serial.write(&myNumber.B,4);
当解码器检测到 IR 模式时,无论我使用发射器还是按下遥控器上的开/关键,它都会将以下内容发送到串行端口。有问题的密钥是 61A0F00F(电源开/关):
Hex Field ASCII
0000 0F F0 A0 61 ...a
当我将实际遥控器指向检测器时,或者当我使用代码 61A0F00F 驱动我的发射器时,解码器会发出相同的响应。所以它无法区分实际遥控器和 Arduino 驱动的发射器之间的区别。问题是系统发射端的 Arduino 无法正确理解此输出。
这是发射代码的样子:
void loop() {
int x = 0;
while (x < 4) {
if (Serial.available()) myNumber.B[x++] = Serial.read();
}
Serial.print(myNumber.UL, HEX);
if (x==3) irsend.sendNEC(myNumber.UL, 32); //drive IR emitter with NEC code
delay(10000);
串行输出如下所示:
HEX field ASCII Field
0000 36 31 41 30 46 30 30 46 61A0F00F
当我手动输入这个十六进制代码时,即通过CoolTerm,反转(所以0FF0A061)机顶盒响应(通过打开)。当我无线连接 Arduinos 时,它没有。
任何人都可以看到上面的通信有什么问题吗?十六进制字段中的数字看起来不太正确,解码器的十六进制字段看起来像十六进制,但发射器的十六进制字段看起来像 ASCII?那么发射器是否需要一个 ASCII 数字但得到的是十六进制?我会认为 Serial.read 和 Serial。write 会以同样的方式工作。
这非常令人沮丧,因为该系统似乎几乎,几乎可以工作,但不完全!
任何帮助/见解将不胜感激。