2

温度の 2 バイトを変換するのが困難です。温度のメッセージを 2 バイトで取得するコントロール ユニット (温度センサー) があります。

1) 例:

message: [ 40 ][ 25 ]
LSBYTE : [ 40 ]
MSBYTE : [ 25 ]
0.03125 C/bit
temperature: 25C° ( seen from the display of the control unit )

2) 例:

message: [ 40 ][ 26 ]
LSBYTE : [ 40 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 30C° ( seen from the display of the control unit )

3) 例:

message: [ 20 ][ 26 ]
LSBYTE : [ 20 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 32C° ( seen from the display of the control unit )

4 ) 例:

message: [ c0 ][ 25 ]
LSBYTE : [ c0 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 29C° ( seen from the display of the control unit )

メッセージを温度に変換する方法がわかりません。

ご支援をお願いします。誰が私に解決策を与えることができますか、それは私のプロジェクトで協力できます(コントロールユニットからメッセージを受信するアプリアンドロイドを作成します)

4

3 に答える 3

0

これは単なるリトルエンディアンのバイト順です。最も重要なバイトは MSB です。本来は摂氏にあるようです。したがって、次のように単純に読んでください(疑似コードを許してください):

var msbyte = read() // whatever you need to get the value
var lsbyte = read() // whatever you need to get the value

var temperature = msbyte
temperature += (lsbyte / 100)

あなたの場合、単純に25.40C°です

于 2014-09-09T08:51:48.510 に答える
0

上位バイトに全体の温度、下位バイトに分数が表示されているようです。それは 25.15625 (25 + 40/256) になります。

0.03125 C/ビットがどこから来たのかわかりません。つまり、16 ビット = 0.5C ということになります。ナンセンスのようです。

もう 1 つの考えられる説明は、.03125 * 合計 = 摂氏度です。MSB が 25 で LSB が 40 の場合、合計は 201.25 度です。だから...おそらく正しくない。

編集: 0.03125 = 1/32

どのポイントも最後の 5 ビットを使用しません。それが分数成分です。上位バイト、下位バイトを取り、右に 5 ビットシフトしてから 273 を引きます (ケルビンから C への変換用)。

于 2014-09-09T08:45:58.047 に答える