温度转换2个字节

时间:2014-09-09 08:29:05

标签: android temperature can-bus

我很难转换两个字节的温度。 我有一个控制单元(温度传感器),我得到两个字节的温度信息。

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 )

我不知道如何在温度下转换消息。

我请求你的支持。 谁可以给我一个解决方案,它可以在我的项目中协作(创建一个app android来接收来自控制单元的消息)

3 个答案:

答案 0 :(得分:0)

它似乎在高位字节中给出了整个temp,在低位字节中给出了小数。那将是25.15625(25 + 40/256)。

我不知道0.03125 C / bit的来源。这意味着16比特= 0.5C。好像废话。

另一种可能的解释是.03125 *总=度C.如果MSB为25且LSB为40,则总数为201.25度。所以...可能不对。

编辑: 0.03125 = 1/32

您的所有积分都不会使用最后5位。这是小数部分。取高位字节,低位字节,右移5位,然后减去273(开尔文到C转换)。

答案 1 :(得分:0)

这只是Little endian字节顺序。你最重要的字节是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°

答案 2 :(得分:0)

解决方案是:如果我有一个示例消息:[20] [26]并且温度是32℃ 公式为:十六进制2620为9760(9760 * 0.03125)-273.15 = 31.85 = 32C°