从 LSM6DSO32 读取温度

Reading temperature from LSM6DSO32

我想知道在这个 captor LSM6DSO32 上读取温度的最佳方法是什么,这里是寄存器

我正在使用 Atmel SAMD21 Cortex M0 开发 Arduino。在这里,这就是我要做的

//reading register
Wire.beginTransmission(DSO_ADDRESS); 
Wire.write(0x20);                                      
Wire.endTransmission();   
Wire.requestFrom(DSO_ADDRESS, 14);

//get bytes, 14 beceause (temp,gyro,accel)
uint8_t buff[14];    
Wire.readBytes(buff, 14);

int16_t raw_t = buff[1] << 8 | buff[0];
float temperature = (raw_t / 256.0) + 25.0;

我的问题是,你认为这种方法可以得到负的原始值吗?例如,如果温度为 22°,则原始值应为 -700 平均值。在分配 raw_t 之前,我是否需要转换或转换来自俘虏的东西?

My question is, do you think this method is fine to get negative raw value ?

下面的代码可能“有效”,但依赖于实现定义的行为。 (如果 int 是 16 位,则为 UB)

int16_t raw_t = buff[1] << 8 | buff[0];

总是有效的替代方案。

uint16_t uraw = ((uint16_t) buff[1]) << 8 | buff[0];
int16_t raw = (uraw & 0x8000u) ? uraw - 65536 : uraw;

而不是 double math 并分配给 float,也使用 float 数学。

// float temperature = (raw_t / 256.0) + 25.0;
float temperature = (raw_t / 256.0f) + 25.0f;

四舍五入可能更正确。

float temperature = (raw_t + (int32_t)25*256) / 256.0f;