在调试MPU6050时,读WHO AM I寄存器可以得到0x68,证明i2c没问题,但读取数据时,log打出来的总是0
翻阅网上各种文章,复位,延时,都试了,不好使。
后来仔细检查代码发现
gyro[0] = tmp[0]<<8 + tmp[1];
直接将寄存器的数据拼接打印出来了。
看datasheet里写的是:16位二进制补码
于是将拼接后的数转为原码,依然不好使。
再检查代码发现,<<优先级比+要低,加括号后改为
gyro[0] = comp2raw((tmp[0]<<8) + tmp[1]);
这样输出就正常了。