我很难转换两个字节的温度。 我有一个控制单元(温度传感器),我得到两个字节的温度信息。
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来接收来自控制单元的消息)
答案 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°