![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Final
Compass.cpp@0:5fd3f73db34f, 2016-01-20 (annotated)
- Committer:
- pstephens18
- Date:
- Wed Jan 20 02:15:26 2016 +0000
- Revision:
- 0:5fd3f73db34f
final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pstephens18 | 0:5fd3f73db34f | 1 | #include "Compass.h" |
pstephens18 | 0:5fd3f73db34f | 2 | extern I2C acc; |
pstephens18 | 0:5fd3f73db34f | 3 | char rawBytes[6]; |
pstephens18 | 0:5fd3f73db34f | 4 | short data[6]; |
pstephens18 | 0:5fd3f73db34f | 5 | short magComponents[3]; |
pstephens18 | 0:5fd3f73db34f | 6 | double heading; |
pstephens18 | 0:5fd3f73db34f | 7 | const int addr1 = (0x1E << 1); |
pstephens18 | 0:5fd3f73db34f | 8 | char config[2]; |
pstephens18 | 0:5fd3f73db34f | 9 | char init[2]; |
pstephens18 | 0:5fd3f73db34f | 10 | double Compass() |
pstephens18 | 0:5fd3f73db34f | 11 | { |
pstephens18 | 0:5fd3f73db34f | 12 | config[0]= 0x02; |
pstephens18 | 0:5fd3f73db34f | 13 | config[1] = 0x00; |
pstephens18 | 0:5fd3f73db34f | 14 | acc.write(addr1, config,2); |
pstephens18 | 0:5fd3f73db34f | 15 | init[0]=0x03; |
pstephens18 | 0:5fd3f73db34f | 16 | while(1) |
pstephens18 | 0:5fd3f73db34f | 17 | { |
pstephens18 | 0:5fd3f73db34f | 18 | acc.write(addr1,init,1); |
pstephens18 | 0:5fd3f73db34f | 19 | acc.read(addr1,rawBytes,6); |
pstephens18 | 0:5fd3f73db34f | 20 | |
pstephens18 | 0:5fd3f73db34f | 21 | |
pstephens18 | 0:5fd3f73db34f | 22 | for (int i = 0; i<6; i++) |
pstephens18 | 0:5fd3f73db34f | 23 | { |
pstephens18 | 0:5fd3f73db34f | 24 | data[i] = rawBytes[i]; |
pstephens18 | 0:5fd3f73db34f | 25 | } |
pstephens18 | 0:5fd3f73db34f | 26 | |
pstephens18 | 0:5fd3f73db34f | 27 | magComponents[0] = data[0]<<8 | data[1]; |
pstephens18 | 0:5fd3f73db34f | 28 | magComponents[1] = data[4]<<8 | data[5]; |
pstephens18 | 0:5fd3f73db34f | 29 | magComponents[2] = data[2]<<8 | data[3]; |
pstephens18 | 0:5fd3f73db34f | 30 | |
pstephens18 | 0:5fd3f73db34f | 31 | heading = atan2((double)magComponents[1],(double)magComponents[0]); // Angle in Radians |
pstephens18 | 0:5fd3f73db34f | 32 | heading = (heading*180)/3.14159; // Convert to Degrees |
pstephens18 | 0:5fd3f73db34f | 33 | heading = heading + 14.85; // Find True North |
pstephens18 | 0:5fd3f73db34f | 34 | if(heading > 180) |
pstephens18 | 0:5fd3f73db34f | 35 | { |
pstephens18 | 0:5fd3f73db34f | 36 | heading -= 360; |
pstephens18 | 0:5fd3f73db34f | 37 | } |
pstephens18 | 0:5fd3f73db34f | 38 | |
pstephens18 | 0:5fd3f73db34f | 39 | return heading; |
pstephens18 | 0:5fd3f73db34f | 40 | } |
pstephens18 | 0:5fd3f73db34f | 41 | } |
pstephens18 | 0:5fd3f73db34f | 42 | |
pstephens18 | 0:5fd3f73db34f | 43 | |
pstephens18 | 0:5fd3f73db34f | 44 |