C++ 理解一些示例代码?

C++ 理解一些示例代码?,c++,types,arduino,accelerometer,i2c,C++,Types,Arduino,Accelerometer,I2c,我正试图弄清楚这个MPU-9150传感器的arduino样本。它通过I2C总线连接,并使用此功能从传感器采样 int MPU9150_readSensor(int addrL, int addrH){ Wire.beginTransmission(MPU9150_I2C_ADDRESS); Wire.write(addrL); Wire.endTransmission(false); Wire.requestFrom(MPU9150_I2C_ADDRESS, 1, true);

我正试图弄清楚这个MPU-9150传感器的arduino样本。它通过I2C总线连接,并使用此功能从传感器采样

int MPU9150_readSensor(int addrL, int addrH){
  Wire.beginTransmission(MPU9150_I2C_ADDRESS);
  Wire.write(addrL);
  Wire.endTransmission(false);

  Wire.requestFrom(MPU9150_I2C_ADDRESS, 1, true);
  byte L = Wire.read();

  Wire.beginTransmission(MPU9150_I2C_ADDRESS);
  Wire.write(addrH);
  Wire.endTransmission(false);

  Wire.requestFrom(MPU9150_I2C_ADDRESS, 1, true);
  byte H = Wire.read();

  return (int16_t)((H<<8)+L);
}
当打印值时,我通过串行监视器返回的值始终为-1,我认为这与
(int16\t)
类型有关,谁对打印值不做任何删除,但我不确定?我也不知道为什么有两个地址可以得到一个单一的值,H和L,为什么它们是位移位和相加在一起?这与I2C总线有关吗

我在这里非常缺乏知识,我正在努力理解这一点,所以我非常感谢您的帮助

谢谢
Alex

值-1=0xFFFF-可能是获取错误值或读取“未连接的输入”的结果。谢谢,你是对的,我只是使用了错误的地址:/但是我仍然不理解需要两个地址H和L(我假设是高和低)。我试图从零开始理解这段代码,所以我并不总是依赖别人的代码…数据被读取为两个8位值。我已经有一段时间没有用I2C做任何事情了,但从内存来看,它是一个只处理8位值的总线。如果需要256个以上的不同值,则需要使用一个以上的8位值(两个或多个寄存器位置)来表示这些值。因此,在这种情况下,返回的值是由“低”和“高”部分组成的16位值。您可以从3个寄存器位置获得24位值,或者从4个寄存器位置获得32位值,等等。谢谢,我现在明白了。这个项目可能比我想象的要孤独…:)
#define MPU9150_TEMP_OUT_H         0x41
#define MPU9150_TEMP_OUT_L         0x42