Compas HMC6352 Serial Monitor

Hello everybody.

I have tried compass hmc6352 with the following code:

#include <Wire.h>

int compassAddress = 0x32 >> 1; // From datasheet compass address is 0x32 for write operations,
// or 0x33 for read operations.
// shift the address 1 bit right, the Wire library only needs the 7
// most significant bits for the address

int heading = 0; // variable to hold the heading angle
int tilt = 0; // variable to hold the tilt angle
int roll = 0; // variable to hold the roll angle

byte responseBytes[6]; // for holding the sensor response bytes

void setup()
{
delay(500); //Wait at least 500 milli-seconds for device initialization
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial communication at 9600bps
/*pinMode(WLED, OUTPUT);
digitalWrite(WLED, HIGH); // just turn ON the onboard LED */
}

void loop()
{
readSensor(); // read data from the HMC6343 sensor
// Note that heading, tilt and roll values are in tenths of a degree, for example
// if the value of heading is 1234 would mean 123.4 degrees, that’s why the result
// is divided by 10 when printing.
Serial.print("Heading: “);
Serial.print(heading / 10, DEC);
Serial.print(” Tilt: “);
Serial.print(tilt / 10, DEC);
Serial.print(” Roll: ");
Serial.println(roll / 10, DEC);
delay(2000); // wait for half a second
}

void readSensor()
{
// step 1: instruct sensor to read echoes
Wire.beginTransmission(compassAddress); // transmit to device
// the address specified in the datasheet is 66 (0x42)
// but i2c adressing uses the high 7 bits so it’s 33
Wire.write(byte(0x50)); // Send a “Post Heading Data” (0x50) command to the HMC6343
Wire.endTransmission(); // stop transmitting

// step 2: wait for readings to happen
delay(2); // datasheet suggests at least 1 ms

// step 3: request reading from sensor
Wire.requestFrom(compassAddress, 6); // request 6 bytes from slave device #33

// step 4: receive reading from sensor
if (6 <= Wire.available()) // if six bytes were received
{
for (int i = 0; i<6; i++) {
responseBytes = Wire.read();

  • }*

  • }*

  • heading = ((int)responseBytes[0]<<8) | ((int)responseBytes[1]); // heading MSB and LSB*

  • tilt = (((int)responseBytes[2]<<8) | ((int)responseBytes[3])); // tilt MSB and LSB*

  • roll = (((int)responseBytes[4]<<8) | ((int)responseBytes[5])); // roll MSB and LSB*
    }[/td]
    [/tr]
    [/table]
    and then in serial monitor reads like this
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    Heading: 0 Tilt: 0 Roll: 0
    why the value zero all?
    anyone can help me,please
    regards

Do not double post.