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 )

我不知道如何将消息转换为温度。

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

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

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

于 2014-09-09T10:04:12.917 回答
0

它似乎为您提供了高字节中的整个温度,以及低字节中的分数。那将是 25.15625 (25 + 40/256)。

我不知道 0.03125 C/bit 是从哪里来的。这意味着 16 位 = 0.5C。好像是胡说八道。

另一种可能的解释是 0.03125 * 总 = 摄氏度。如果 MSB 为 25,LSB 为 40,则总和为 201.25 度。所以……可能不对。

编辑:0.03125 = 1/32

您的所有观点都没有使用最后 5 位。那是小数部分。取高字节、低字节并右移 5 位,然后减去 273(用于开尔文到 C 的转换)。

于 2014-09-09T08:45:58.047 回答