با سلام
همیشه زمانی که با ماژول های I2C کار میکنید و مشکل در پروتکل های ارتباطی دارید از دستور I2C Scanner که در بخش نمونه آموزش های خود برنامه آردوینو هست استفاده کنید تا ID تمامی IC ها را به دست آورید و با کد پروژه مقایسه کنید.
این مورد را بررسی کنید و اعلام کنید که چه شماره ID هایی را برای شما برمیگرداند، تا بررسی کنم مشکل کد در چه جایی می باشد.
ویرایش اول:
با بررسی هر کدام از لایبراری ها به صورت زیر می باشد.
برای MPU6050 : // Default I2C address of the MPU6050 (0x69 if AD0 pin set to HIGH)
#define MPU6050_DEFAULT_ADDRESS 0x68.
برای BMP : #define BMP085_I2CADDR 0x77 //!< BMP085 I2C address
برای HMC : #define COMPASS_I2C_ADDRESS 0x3C >> 1
که طبق توضیحات این میکرو به صورت زیر می باشد.
/* NOTE:
* There are both 7- and 8-bit versions of I2C addresses.
* 7 bits identify the device, and the eighth bit determines
* if it's being written to or read from. The Wire library uses
* 7 bit addresses throughout. If you have a datasheet or sample code
* that uses 8 bit address, you'll want to drop the low bit
* (i.e. shift the value one bit to the right), yielding an
* address between 0 and 127.
*
* The HMC datasheet says...
* " The default (factory) HMC5883L 7-bit slave address is 0x3C for write operations, or 0x3D for read operations. "
* which is of course silly, what they mean is that these are 8=bit addresses and thus we want to shift right
* one of them to get the 7-bit address that Wire wants
*
* 0x3C = 111100
* >> 1 = 11110
* = 0x1E
*
* 0x3D = 111101
* >> 1 = 11110
* = 0x1E
*
*/
متاسفانه این لایبراری اجازه عوض کردن آدرس از طریق کد را نمیدهد و باید دستی خط مربوط به i2c_address که در فایل HMC5883L_Simple.h قرار دارد را عوض کنید.
یا می توانید از لایبراری که خودتان استفاده کرده اید به جای این لایبراری استفاده کنید.
فقط به نظر میرسد که دستور
accelgyro.setI2CBypassEnabled(true); // set bypass mode for gateway to hmc5883L
برای وصل شدن HMC به میکرو شما لازم است زده شود.
در صورتی که همچنان مشکل در راهاندازی داشتید اعلام کنید تا بررسی های بیشتری انجام بشود.
البته با توجه به توضیحاتی که برای HMC داده شده است به نظر می آید آدرس 1E درست می باشد. بهتر است باز بررسی کنید.
یک احتمال نیز همین خط بالا می باشد و با خاموش کردن این خط امکان دارد مشکل حل شود.