CMPS10 tilt compensated compass

Dependencies:   mbed

Committer:
tylerjw
Date:
Tue Oct 30 20:56:26 2012 +0000
Revision:
1:a4f567b7824d
Parent:
0:2abb1ba9b2c5
Fixed calibrate function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 0:2abb1ba9b2c5 1 #include "mbed.h"
tylerjw 0:2abb1ba9b2c5 2
tylerjw 0:2abb1ba9b2c5 3 I2C compass(p9,p10);
tylerjw 0:2abb1ba9b2c5 4
tylerjw 0:2abb1ba9b2c5 5 Serial pc(USBTX, USBRX); // tx, rx
tylerjw 0:2abb1ba9b2c5 6
tylerjw 0:2abb1ba9b2c5 7 const int addr = 0xC0; // define the I2C Address
tylerjw 0:2abb1ba9b2c5 8
tylerjw 0:2abb1ba9b2c5 9 void calibrate();
tylerjw 0:2abb1ba9b2c5 10
tylerjw 0:2abb1ba9b2c5 11 int main()
tylerjw 0:2abb1ba9b2c5 12 {
tylerjw 0:2abb1ba9b2c5 13 char data[2];
tylerjw 0:2abb1ba9b2c5 14 char cmd[2];
tylerjw 0:2abb1ba9b2c5 15 int bearing_raw;
tylerjw 0:2abb1ba9b2c5 16 float bearing;
tylerjw 0:2abb1ba9b2c5 17 pc.baud(9600);
tylerjw 0:2abb1ba9b2c5 18
tylerjw 0:2abb1ba9b2c5 19 //calibrate();
tylerjw 0:2abb1ba9b2c5 20
tylerjw 0:2abb1ba9b2c5 21 while(1) {
tylerjw 0:2abb1ba9b2c5 22 cmd[0] = 0x2;
tylerjw 0:2abb1ba9b2c5 23 compass.write(addr,cmd,1,true);
tylerjw 0:2abb1ba9b2c5 24 compass.read(addr,data,2,false);
tylerjw 0:2abb1ba9b2c5 25
tylerjw 0:2abb1ba9b2c5 26 bearing_raw = (data[0] << 8) + data[1];
tylerjw 0:2abb1ba9b2c5 27 bearing = bearing_raw / 10.0;
tylerjw 0:2abb1ba9b2c5 28
tylerjw 0:2abb1ba9b2c5 29 pc.printf("data[0] = 0x%x, data[1] = 0x%x, raw = 0x%x, bearing = %f\r\n", data[0], data[1], bearing_raw, bearing);
tylerjw 0:2abb1ba9b2c5 30
tylerjw 0:2abb1ba9b2c5 31 wait(0.640);
tylerjw 0:2abb1ba9b2c5 32 }
tylerjw 0:2abb1ba9b2c5 33 }
tylerjw 0:2abb1ba9b2c5 34
tylerjw 0:2abb1ba9b2c5 35 void calibrate()
tylerjw 0:2abb1ba9b2c5 36 {
tylerjw 0:2abb1ba9b2c5 37 char data[2];
tylerjw 0:2abb1ba9b2c5 38 data[0] = 22;
tylerjw 0:2abb1ba9b2c5 39 pc.puts("Make sure the Device is on a level surface.\r\n");
tylerjw 0:2abb1ba9b2c5 40 pc.puts("Point the Device North.\r\n");
tylerjw 0:2abb1ba9b2c5 41 pc.puts("Press enter to continue.\r\n");
tylerjw 0:2abb1ba9b2c5 42 pc.getc();
tylerjw 0:2abb1ba9b2c5 43 data[1] = 0xF0;
tylerjw 0:2abb1ba9b2c5 44 compass.write(addr,data,2,false);
tylerjw 1:a4f567b7824d 45 pc.puts("Point the Device East (+90).\n\r");
tylerjw 0:2abb1ba9b2c5 46 pc.puts("Press enter to continue.\r\n");
tylerjw 0:2abb1ba9b2c5 47 pc.getc();
tylerjw 0:2abb1ba9b2c5 48 data[1] = 0xF5;
tylerjw 0:2abb1ba9b2c5 49 compass.write(addr,data,2,false);
tylerjw 1:a4f567b7824d 50 pc.puts("Point the Device South (+180).\n\r");
tylerjw 0:2abb1ba9b2c5 51 pc.puts("Press enter to continue.\r\n");
tylerjw 0:2abb1ba9b2c5 52 pc.getc();
tylerjw 0:2abb1ba9b2c5 53 compass.write(addr,data,2,false);
tylerjw 1:a4f567b7824d 54 pc.puts("Point the Device West (+270).\n\r");
tylerjw 0:2abb1ba9b2c5 55 pc.puts("Press enter to continue.\r\n");
tylerjw 0:2abb1ba9b2c5 56 pc.getc();
tylerjw 0:2abb1ba9b2c5 57 compass.write(addr,data,2,false);
tylerjw 0:2abb1ba9b2c5 58 }