/*
  CMPS03 compass reader
  Language: Wiring/Arduino
 
  Reads data from a Devantech CMPS03 compass sensor.
  Sensor connections:
     SDA - Analog pin 4
     SCL - Analog pin 5
 */

// include Wire library to read and write I2C commands:
#include <Wire.h>

// the commands needed for the SRF sensors:
#define sensorAddress 0x60
// this is the memory register in the sensor that contains the result:
#define resultRegister 0x02


void setup()
{
  // start the I2C bus
  Wire.begin();                
  // open the serial port:
  Serial.begin(9600);       
}

void loop()
{
  // send the command to read the result in inches:
  setRegister(sensorAddress, resultRegister);
  // read the result:
  int bearing = readData(sensorAddress, 2);
  // print it:
  Serial.print("bearing: ");
  Serial.print(bearing/10);
  Serial.println(" degrees");
  // wait before next reading:
  delay(70);                
}

/*
  setRegister() tells the SRF sensor to change the address 
  pointer position
 */
void setRegister(int address, int thisRegister) {
  // start I2C transmission:
  Wire.beginTransmission(address); 
  // send address to read from:
  Wire.send(thisRegister);      
  // end I2C transmission:      
  Wire.endTransmission();    
}
/*
readData() returns a result from the SRF sensor
 */
 
int readData(int address, int numBytes) {
  int result = 0;        // the result is two bytes long

  // send I2C request for data:
  Wire.requestFrom(address, numBytes);   
  // wait for two bytes to return:
  while (Wire.available() < 2 )   {
    // wait for result
  }
  // read the two bytes, and combine them into one int:
  result = Wire.receive() * 256; 
  result = result + Wire.receive(); 
  // return the result:
  return result;
}

Sorry, the comment form is closed at this time.

   
© 2012 Making Things Talk Suffusion theme by Sayontan Sinha