3

我用最佳的Ken Shirriff Arduino Library解码了很长时间的 IR 代码。我稍微修改了代码,以便能够转储三星空调 (MH026FB) 56 位信号。

我的工作结果位于 Google Docs 文档Samsung MH026FB AirCon IR Codes Dump中。

它是一个包含所有转储值和结果解释的电子表格。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 的字节)有关,但我真的不知道如何。

这个问题有解决方案吗?

4

4 回答 4

3

Ken Shirriff 解决了这个问题。算法如下:

  1. 计算除 #2 之外的所有字节中 1 的位数(校验和)
  2. 计算计数 mod 15。如果值为 0,请改用 15。
  3. 从 2 中取值,翻转4 位,并反转4 位。
  4. 校验和是Bn,其中 n 是上一步的值。

祝贺他的聪明和敏锐。

于 2012-08-13T08:35:26.433 回答
1

bytes/packets当 in和0/1的位顺序被正确解释时(从算法看来两者都是相反的),算法将是sum of 0 bits modulo 15.

于 2014-05-11T16:05:59.120 回答
1

这几乎是正确的。数一下 0/1(你可以随意称呼它们,但它是短信号)。不要计算 2. 字节和 3.byte 的第一个/最后一位(取决于您将其视为大印度还是小印度)。取结果和 -30(29-30 = 15,只看 4 位!)如果短信号 = 0,则反向结果校验和 = 0x4“反向结果”,如果长信号 = 0,则为 0xB“反向结果”。

于 2019-03-19T12:34:55.207 回答
0

我使用了 Ken 的方法,但 mod 15 对我不起作用。

计算除#2(校验和)以外的所有字节中 1 的位数 计算模数 17。如果值为 16,则使用模式结果的第一个字节(0)。取值,翻转 4 位。校验和为 0xn9,其中 n 是上一步的值。

于 2018-04-16T17:11:24.283 回答