传感器故障。无法更换Arduino的Wire库

时间:2016-05-19 14:25:27

标签: c arduino ascii avr uart

我正在构建一个库以从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

由于

1 个答案:

答案 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秒之间。