Search wiring.org.co:

This example is for Wiring version 0024+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.

I2C HMC6352 compass heading (sparkfun breakout) by BARRAGAN (http://barraganstudio.com)
Demonstrates use of the Wire library reading data from the HMC6352 compass heading

    #include <Wire.h>

    int compassAddress = 0x42 >> 1;  // From datasheet compass address is 0x42
                                     // shift the address 1 bit right, the Wire library only needs the 7
                                     // most significant bits for the address
    int reading = 0;

    void setup()
    {
      Wire.begin();                // join i2c bus (address optional for master)
      Serial.begin(9600);          // start serial communication at 9600bps
      pinMode(48, OUTPUT);
      digitalWrite(48, HIGH);
    }

    void loop()
    {
      // 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.send('A');          // command sensor to measure angle
      Wire.endTransmission();  // stop transmitting

      // step 2: wait for readings to happen
      delay(10);               // datasheet suggests at least 6000 microseconds

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

      // step 4: receive reading from sensor
      if(2 <= Wire.available())     // if two bytes were received
      {
        reading = Wire.receive();   // receive high byte (overwrites previous reading)
        reading = reading << 8;     // shift high byte to be high 8 bits
        reading += Wire.receive();  // receive low byte as lower 8 bits
        reading /= 10;
        Serial.println(reading);    // print the reading
      }

      delay(500);                   // wait for half a second
    }