我有很长时间用最佳的Ken Shirriff Arduino库解码IR代码。我稍微修改了一下代码,以便能够转储三星空调(MH026FB)56位信号。
我的工作成果位于Google Docs文档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个字节)有关,但我真的无法弄清楚如何。
有这个问题的解决方案吗?
Ken Shirriff对此进行了整理。算法如下:
恭喜他的聪明和敏锐。
当bytes/packets
和0/1中的位顺序被正确解释时(从算法看起来两者都被反转),算法将只是sum of 0 bits modulo 15
。
这几乎是正确的。计算0/1(您可以将它们称为您喜欢的,但它是短信号)。不要计算2.byte的2.字节和第一位/最后一位(取决于你是看到它是大印度还是小印度)。取结果和-30(29-30 = 15,仅查看4位!)反向结果Checksum = 0x4“reverse resultesult”,如果短信号= 0,则0xB“反向结果”如果长信号= 0。
我用Ken的方法,但mod 15对我没用。
计算除#2(校验和)之外的所有字节中的1位数。计算计数模17.如果值为16,则使用模式结果的第一个字节(0)。取值,翻转4位。校验和为0xn9,其中n是上一步的值。