我正在构建一个库以从adafruit传感器中检索数据(sht31d)
温度读数看起来准确,但湿度没有变化。
我的调试:
temp: 23.36 humid: 0.39
在main.c中调用以下方法
(来自sht31.c的方法):
bool readTempHum(void)
{
uint8_t readbuffer[6];
writeCommand(SHT31_MEAS_HIGHREP);
_delay_ms(500);
for (uint8_t i=0; i<6; i++)
{
readbuffer[i] = read8(SHT31_DEFAULT_ADDR);
}
uint16_t ST, SRH;
ST = readbuffer[0];
ST <<= 8;
ST |= readbuffer[1];
SRH = readbuffer[3];
SRH <<= 8;
SRH |= readbuffer[4];
double stemp = ST;
stemp *= 175;
stemp /= 0xffff;
stemp = -45 + stemp;
temp = stemp;
double shum = SRH;
shum *= 100;
shum /= 0xFFFF;
humidity = shum;
return true;
}
To view the full implementation please click here
由于
答案 0 :(得分:1)
实际上看起来是正确的。温度和湿度均以两个字节编码,如果您手动完成所有计算,它看起来没问题(在这种情况下只有温度):
ST = readbuffer[0]; // 100
ST <<= 100; // 100 << 8 = 25600
ST |= readbuffer[1]; // 25600 | 1 = 25601
double stemp = ST; // 25601
stemp *= 175; // 25601 * 175 = 4480000
stemp /= 0xffff; // 4480000 / 65535 = 68,36
stemp = -45 + stemp; // -45 + 68,36 = 23,36
所以它与ASCII编码无关。只需给你的传感器一点时间。
另外,如果您查看sensor datasheet,您会发现其响应时间介于2到8秒之间。