This example is for Wiring version 1.0 build 0100+. 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 On Wiring v1 boards the SCL and SDA pins are: 0 and 1 On Wiring S board the SCL and SDA pins are: 8 and 9
Demonstrates use of the Wire library reading data from the HMC6352 compass heading On Wiring v1 boards the SCL and SDA pins are: 0 and 1 On Wiring S board the SCL and SDA pins are: 8 and 9
#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(WLED, OUTPUT); digitalWrite(WLED, 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.write('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.read(); // receive high byte (overwrites previous reading) reading = reading << 8; // shift high byte to be high 8 bits reading += Wire.read(); // receive low byte as lower 8 bits reading /= 10; Serial.println(reading); // print the reading } delay(500); // wait for half a second }