关于MPU-6050代码中Wire.requestFrom参数与Arduino文档的疑问
关于MPU-6050读取与Wire.requestFrom的疑问
我正在尝试读取MPU-6050 IMU芯片的数据,这是我首次接触I2C通信及这类硬件,参考了一份教程中的代码。在其MPU6050 Arduino代码章节里,提到Wire.requestFrom函数中的‘6’表示读取6个寄存器,代码片段如下:
void loop() { // === Read acceleromter data === // Wire.beginTransmission(MPU); Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers //For a range of +-2g, we need to divide the raw values by 16384, according to the datasheet AccX = (Wire.read() << 8 | Wire.read()) / 16384.0; // X-axis value AccY = (Wire.read() << 8 | Wire.read()) / 16384.0; // Y-axis value AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0; // Z-axis value }
但我对此感到困惑:根据Arduino官方文档,Wire.requestFrom的第二个参数quantity表示要返回的字节数。因此我有两个问题:
- 既然
Wire.write(0x3B)仅指定一个寄存器(据我对MPU6050寄存器 datasheet的理解,该寄存器仅输出1字节),为何requestFrom能返回多于1字节的数据? - 假设‘6’表示要读取的寄存器数量,为何文档未明确说明?还是说Arduino的定义对程序员而言足够清晰?
我对I2C通信流程感到有些茫然,但正在努力学习,若问题存在疏漏或表述不清,敬请谅解。感谢您的帮助!
内容的提问来源于stack exchange,提问作者BarelyDeveloper
相关产品推荐
相关产品推荐

