Thursday, August 23, 2012

Getting the CMPS03 compass to work with the Arduino

Code for testing a digital compass using Arduino UNO

CMPS03 with arduino I2C example

This will display a value of 0 - 359 for a full rotation of the compass.

The SDA line is on analog pin 4 of the arduino and is connected to pin 3 of the CMPS03.
The SCL line is on analog pin 5 of the arduino and is conected to pin 2 of the CMPS03.
Both SDA and SCL are also connected to the +5v via a couple of 1k8 resistors.
A switch to callibrate the CMPS03 can be connected between pin 6 of the CMPS03 and the ground.


#define address 0x60 //defines address of compass

void setup(){
  Wire.begin(); //conects I2C

void loop(){
  byte highByte;
  byte lowByte;
   Wire.beginTransmission(address);      //starts communication with cmps03
   Wire.write(2);                         //Sends the register we wish to read

   Wire.requestFrom(address, 2);        //requests high byte
   while(Wire.available() < 2);         //while there is a byte to receive
   highByte =;           //reads the byte as an integer
   lowByte =;
   int bearing = ((highByte<<8)+lowByte)/10;