我正在进行一个项目,使用InvenSense的运动驱动程序API读取MPU-6050中的值。首先,我想测一下体温。
阅读注册文件,有以下句子。
给定寄存器值的温度(以摄氏度为单位)可能为
计算方式:温度(摄氏度)=(TEMP\U OUT寄存器值为a
签字数量)/340+36.53
此API的源代码中有以下函数
int mpu_get_temperature(long *data, unsigned long *timestamp)
{
unsigned char tmp[2];
short raw;
if (!(st.chip_cfg.sensors))
return -1;
if (i2c_read(st.hw->addr, st.reg->temp, 2, tmp))
return -1;
raw = (tmp[0] << 8) | tmp[1];
if (timestamp)
get_ms(timestamp);
data[0] = (long)((35 + ((raw - (float)st.hw->temp_offset) / st.hw->temp_sens)) * 65536L);
return 0;
}
当我在互联网上搜索时,我通常会看到这个片段,它似乎很管用
uint8_t buf[2];
mpu_read_reg(0x41, &buf[0]);
mpu_read_reg(0x42, &buf[1]);
uint16_t raw = (((uint16_t) buf[0]) << 8) | buf[1];
float temperature = raw / 340.0f + 36.53f;
有人能解释一下线路吗
(long)((35 + ((raw - (float)st.hw->temp_offset) / st.hw->temp_sens)) * 65536L)
对我来说?
这是某种类型的转换还是我出了什么问题?