// A function to configure the HMC device on the auxilliary I2C bus
// The only function required to set up the magnetometer is to configure
// continuous mode.
// I2C address is HMC5883L_Address
// Set HMC_ModeRegister to value HMC_Measurement_Continuous
//
void initMag()
{
mpu.setSlaveAddress( 0, 0x7f & HMC5883L_Address ); // clear the msbit for a write operation
mpu.setSlaveRegister( 0, HMC_ModeRegister );
mpu.setSlaveEnabled( 0, true );
mpu.setSlaveWriteMode( 0, false );
mpu.setSlaveDataLength( 0, 1 );
mpu.setSlaveOutputByte( 0, HMC_Measurement_Continuous );
delay(10) ;
mpu.setSlaveRegister( 0, HMC_ConfigurationRegisterB );
mpu.setSlaveEnabled( 0, true );
mpu.setSlaveWriteMode( 0, false );
mpu.setSlaveDataLength( 0, 1 );
mpu.setSlaveOutputByte( 0, 0x20 );
delay(10) ;
}
// A function to initiate continuous reading of the magnetometer device
void runMag()
{
mpu.setSlaveAddress( 0, 0x80 | HMC5883L_Address ); // set the msbit for a read operation
mpu.setSlaveRegister( 0, HMC_DataRegisterBegin );
//mpu.setSlaveRegister( 0, 0x00 );
mpu.setSlaveWriteMode( 0, false ) ; // if false, writes the register address before reading OR writing data
mpu.setSlaveDataLength( 0, 6 ) ;
mpu.setSlave4MasterDelay( 31 ); // reduces sample rate by 1/(1+31) Note 31 is the biggest number allowed here
mpu.setSlaveDelayEnabled( 0, true );
}
void getMag( int* buf )
{
buf[0]=mpu.getExternalSensorWord(0) ; // gets byte 0 and 1 from the sensor buffer and makes byte 0 the most significant byte of the word
buf[1]=mpu.getExternalSensorWord(2) ;
buf[2]=mpu.getExternalSensorWord(4) ;
//buf[3]=mpu.getExternalSensorWord(6) ;
//buf[4]=mpu.getExternalSensorWord(8) ;
}