C 如何转换从温度传感器获取的值?

C 如何转换从温度传感器获取的值?,c,sensors,i2c,C,Sensors,I2c,我正在使用ST温度传感器(hts221),我使用I2C命令与传感器通信 我从文件中看到如下文本 在此处输入代码温度数据以2的补码表示。 下图是文档中的描述。 从传感器读取的温度数据如下所示 TEMP_OUT_L is 0xA8 TEMP_OUT_H is 0xFF 如何将TEMP\u OUT\u L和TEMP\u OUT\u H的值转换为温度数据? 提前感谢?通过将两个值中的位串联起来,形成一个16位值: const temp_h = i2c_read_byte(TEMP_OUT_H); c

我正在使用ST
温度传感器(hts221)
,我使用
I2C
命令与传感器通信

我从文件中看到如下文本

在此处输入代码温度数据以2的补码表示。

下图是文档中的描述。

从传感器读取的
温度数据如下所示

TEMP_OUT_L is 0xA8
TEMP_OUT_H is 0xFF
如何将TEMP\u OUT\u L和TEMP\u OUT\u H的值转换为温度数据?


提前感谢?

通过将两个值中的位串联起来,形成一个16位值:

const temp_h = i2c_read_byte(TEMP_OUT_H);
const temp_l = i2c_read_byte(TEMP_OUT_L);
const uint16_t temp = (temp_h << 8) | temp_l;
const temp_h=i2c_read_字节(temp_OUT_h);
常数temp_l=i2c_读取字节(temp_OUT_l);
const uint16_t temp=(第6页的temp_h中说:

下面是您需要做的:

#define TEMP_SENSITIVITY 0.016f
#define TEMP_OFFSET      ???    /* Get this value from the datasheet. */

unsigned char tempOutH;
unsigned char tempOutL;

/* Here you get the values for tempOutH and tempOutL. */

uint16_t tempData = (tempOutH << 8) | tempOutL;
float    temp     = (tempData * TEMP_SENSITIVITY) + TEMP_OFFSET;  
#定义温度灵敏度0.016f
#定义温度偏移量???/*从数据表中获取此值*/
无符号字符tempOutH;
无符号字符tempOutL;
/*这里是tempOutH和tempOutL的值*/

uint16_t tempData=(tempOutH
0xFF
部分的
0xFFA8
对我来说似乎可疑,可能是设备配置为在8位模式下工作(如果可能的话),在第24页上如是说

T0和T1是实际标定温度值乘以 八,


所以
0xA8
除以8得到:31.25-你周围的温度不是很高吗?

你尝试过什么?如果你有I2C的2个字节,你已经完成了最难的部分。剩下的是一个简单的位移位和或运算。@squemishosifrage我认为直接指针解引用不起作用。OP提到他正在读取I2C。@user694733啊,错过了。我希望有更多的细节……如果不是一杯加冰的水在0摄氏度或32华氏度,那么你的值是多少。?但是,刻度是多少?我觉得应该在某个地方记录下来。这是特定于供应商的吗?另外,在数据表的第25页()中,它显示了一个使用线性插值的计算示例(y=mx+b)将数字值转换为温度的方法。在这和上面提供的答案之间,您有您可能需要的所有信息。抱歉…我是新手,我已经看到了数据表中的第25页。但我仍然了解如何将数值转换为温度…@Martin我没有时间为您完全整理这些信息。我建议你不能非常仔细地阅读数据表(如果需要多次),它应该都在那里。抱歉……我不明白。如何将0xA8转换为31.25?只需将250(0xA8)除以8,那么250/8=31.25
#define TEMP_SENSITIVITY 0.016f
#define TEMP_OFFSET      ???    /* Get this value from the datasheet. */

unsigned char tempOutH;
unsigned char tempOutL;

/* Here you get the values for tempOutH and tempOutL. */

uint16_t tempData = (tempOutH << 8) | tempOutL;
float    temp     = (tempData * TEMP_SENSITIVITY) + TEMP_OFFSET;