我有很长时间使用最佳Ken Shirriff Arduino库解码IR代码。我修改了一下代码,以便能够转储三星空调(MH026FB)56位信号。
我的工作成果位于Google文档文档 Samsung MH026FB AirCon IR Codes Dump 。
这是一个包含所有倾销值和结果解释的spreasheet。 AFAIK,空调机组根据命令发出两个或三个56位数据的“突发”。我能够正确解码位,找出空调温度,风扇,功能和其他选项的位置。
我遇到的问题与校验和有关。在所有这些7字节代码中,第二个以某种方式从后5个字节计算,例如:
BF B2 0F FF FF FF F0 (lead-in code)
7F B8 8A 71 F6 4F F0 (auto mode - 25 degrees)
7F B2 80 71 7A 4F F0 (auto mode - 26 degrees)
7F B4 80 71 FA 7D F0 (heat mode - 26 degrees - fan auto)
由于我在运行时重新创建了IR代码,因此我需要能够计算校验和来获取这些代码。
我尝试了许多标准校验和算法,但都没有给出有意义的结果。校验和似乎与其余代码中的零个数相关(字节从3到7),但我真的无法弄清楚如何。
这个问题有解决方法吗?
答案 0 :(得分:3)
Ken Shirriff对此进行了整理。算法如下:
祝贺他的聪明和敏锐。
答案 1 :(得分:1)
当 bytes/packets
和 0/1 中的位顺序被正确解释时(从算法看起来两者都被反转),算法将只是的 sum of 0 bits modulo 15
强>
答案 2 :(得分:1)
这几乎是正确的。 计算0/1(您可以按自己的喜好称呼它们,但这是短信号)。 不要计算2.字节和3.byte的第一位/最后一位(取决于您是看它是印度人还是印度人)。 取结果和-30(29-30 = 15,仅看4位!) 反转结果 如果短信号= 0,则校验和= 0x4“反向结果”;如果长信号= 0,则校验和= 0xB“反向结果”。
答案 3 :(得分:0)
我使用了Ken的方法,但mod 15对我没用。
计算除#2(校验和)以外的所有字节中的1位数 计算计数模17.如果值为16,则使用模式结果的第一个字节(0)。 取值,翻转4位。 校验和为0xn9,其中n是上一步的值。