Compass: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
Thex (talk | contribs)
m Added whiteboard schematic
Thex (talk | contribs)
Line 6: Line 6:
[[File:CMPS03.jpg|thumb]]
[[File:CMPS03.jpg|thumb]]
[[File:DC-Boarduino.jpg|thumb]]
[[File:DC-Boarduino.jpg|thumb]]
[[File:OLED-96x64.jpg|thumb]]
[[File:ShiftBrite.jpg|thumb]]
[[File:FTDI-USB.jpg|thumb]]
[[File:FTDI-USB.jpg|thumb]]


Line 12: Line 12:
* DC Boarduino http://learn.adafruit.com/boarduino-kits/dc-parts-list
* DC Boarduino http://learn.adafruit.com/boarduino-kits/dc-parts-list
* FTDI Friend http://www.adafruit.com/products/284
* FTDI Friend http://www.adafruit.com/products/284
* ShiftBrite http://macetech.com/blog/node/54
* [[ShiftBrite]] http://macetech.com/blog/node/54


Other potential components
Other potential components

Revision as of 01:22, 21 December 2013

Breadboard with Compass module and Boarduino, calibration button with indicator, FTDI serial out connected.

Components

Other potential components

Future potential SMD components

Other products

Schematic

Code

The following will give a compass heading via serial monitor

/*
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.
*/

#include <Wire.h>

#define ADDRESS 0x60 //defines address of compass

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

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

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