Tyler Weaver
/
CMPS10_demo
CMPS10 tilt compensated compass
main.cpp@0:2abb1ba9b2c5, 2012-10-30 (annotated)
- Committer:
- tylerjw
- Date:
- Tue Oct 30 20:52:12 2012 +0000
- Revision:
- 0:2abb1ba9b2c5
- Child:
- 1:a4f567b7824d
working;
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:2abb1ba9b2c5 | 45 | pc.puts("Point the Device West.\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 | 0:2abb1ba9b2c5 | 50 | pc.puts("Point the Device South.\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 | 0:2abb1ba9b2c5 | 54 | pc.puts("Point the Device East.\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 | } |