0

この 16 進 IR コードを取得するにはどうすればよいですか

0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0e 6015 0

このような生のIRコードに

int[] irdata = {4600,4350,700,1550,650,1550,650,1600,650,450,650,450,650,450,650,450,700,400,700,1550,650,1550,650,1600,650,450,650,450,650,450,700,450,650,450,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,650,1600,650,450,650,1550,650,1600,650,1550,650,1550,700,1550,650,1550,650};
    mIR.sendIRPattern(37470, irdata);
4

1 に答える 1

7

最初の 4 つの数字には特別な意味があります。

  • 1 ~ 0000 は生の IR データを示します (この値は無視できます)
  • 2 - 頻度
  • 3 - 最初のバースト ペア シーケンスの長さ
  • 4 - 2 番目のバースト ペア シーケンスの長さ

頻度は特に重要です。ご想像のとおり、LG は Hz 単位の周波数を必要としていますが、16 進コードは Pronto 内部クロックに基づいています。変換は次のようになります。

carrierfrequency = 1000000/(HexFreq * .241246)

コードの残りの部分では、その 4 桁のプリアンブルの後に、LG は μs 単位でそれらを求めています。ここで、16 進コードは周波数に関してそれらを持っています。それぞれを変換する必要があります。

pulselength = 1000000*(HexPulse/carrierfrequency)

全体を送信するだけなのか、それとも最初または 2 番目のバースト シーケンスだけを送信したいのかわかりません。2 つ目は、ボタンの長押しなどに使用されるリピート シーケンスです。ただし、これらはペアに関するものであり、個々の数字ではないことに注意してください。 00a9 00a81 つのバースト ペア (オン時間、オフ時間) です。この場合:

  • 最初のシーケンス: 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702
  • 2 番目のシーケンス: 00a9 00a8 0015 0015 0015 0e6e

補足: 前に明確なペアがあり、最後に非常に大きな値があるのは非常に典型的です。数えなくても簡単に目玉ができます。

したがって、手順をレイアウトするには:

array numbers = Split hexcode on space
(ignore numbers[0])
carrierFrequency = 1000000/(numbers[1] * .241246)
codeLength = numbers[2]
repeatCodeLength = numbers[3]
for (number in numbers[4 to end]) {
    convertedToMicrosec = 1000000*(number/carrierFrequency)
    fullSequenceConverted.add(convertedToMicrosec)
}
sequence1EndPoint = 2 * codeLength
sequence2EndPoint = sequence1EndPoint + 2 * repeatCodeLength
firstSequence = fullSequenceConverted from index 0 to sequence1EndPoint
secondSequence = fullSequenceConverted from sequence1EndPoint to sequence2EndPoint

mIR.sendIRPattern(carrierFrequency, firstSequence)
于 2014-12-05T19:42:11.373 に答える