Hi,

it seem that I’m able to get the data from the HMC5883L sensor but, the data is weird. The data would gain an increment of of 1 until it turn fully 90 degree then suddenly jump to another number. Here the code can some1 look over it.

`var i2c = require('i2c');`

`var address_compass = 0x1e;`

`var wire1 = new i2c(address_compass, {device: '/dev/i2c-1'});`

`var compassData_X = 0;`

`var compassData_Y = 0;`

`var compassData_Z = 0;`

`var compass;`

`wire1.writeBytes(0x00, [0x70], function(err) {})`

`wire1.writeBytes(0x01, [0xA0], function(err) {})`

`wire1.writeBytes(0x02, [0x00], function(err) {})`

`setInterval(function(){ wire1.readBytes(0x03, 2, functions(err,res){`

``compassData_X = res[0] << 8 | res[1] ;``

`compassData_Z = res[2] << 8 | res[3] ;`

``compassData_Y = res[4] << 8 | res[5];``

`console.log("x: " + compassData_X + "y: " + compassData_Y + "z: " + compassData_X ); */`

`var declinationAngle = .226; //use in compass functions, value needed checking with sensor`

`var pi = 3.14;`

`var heading = Math.atan2(compassData_Y,compassData_X);`

`// Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.`

`//If you cannot find your Declination, comment out this lines, your compass will be slightly off.`

`heading += declinationAngle;`

`// Correct for when signs are reversed.`

`if(heading < 0)`

`heading += 2*pi;`

``

`// Check for wrap due to addition of declination.`

`else if(heading > 2*pi )`

`heading -= 2*pi ;`

`// Convert radians to degrees for readability.`

`var headingDegrees = ((heading * 180)/pi);`

`console.log("x: " + compassData_X + " y: " + compassData_Y + " z: " + compassData_Z + " uT"); // Display the results`

`//(magnetic vector values are in micro-Tesla (uT))`

`console.log('Heading: ' + headingDegrees + ' degrees' );`

`})}, 1000)`

`Thank you,`