LSM9DS1 with EFM32WG
Dependencies: mbed PinDetect LSM9DS1_works
Dependents: WORKS_VERSION_1_sERIAL_PROCESSING LSM9DS1_works
main.cpp@4:6c3cdc717a1f, 2020-06-01 (annotated)
- Committer:
- chebbi
- Date:
- Mon Jun 01 20:09:14 2020 +0000
- Revision:
- 4:6c3cdc717a1f
- Parent:
- 3:64a8188c5a44
test_mag
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmar7 | 0:e8167f37725c | 1 | #include "LSM9DS1.h" |
chebbi | 4:6c3cdc717a1f | 2 | #include "math.h" |
chebbi | 3:64a8188c5a44 | 3 | //DigitalOut myled(LED1); |
jmar7 | 0:e8167f37725c | 4 | Serial pc(USBTX, USBRX); |
chebbi | 4:6c3cdc717a1f | 5 | #define M_PI 3.14 |
chebbi | 3:64a8188c5a44 | 6 | #define printff_CALCULATED |
chebbi | 3:64a8188c5a44 | 7 | #define printff_SPEED 250 |
chebbi | 3:64a8188c5a44 | 8 | #define DECLINATION -8.58 |
jmar7 | 0:e8167f37725c | 9 | |
chebbi | 3:64a8188c5a44 | 10 | void printfGyro(); |
chebbi | 3:64a8188c5a44 | 11 | void printfAccel(); |
chebbi | 3:64a8188c5a44 | 12 | void printfMag(); |
chebbi | 4:6c3cdc717a1f | 13 | void printfAttitude(float mx, float my, float mz); |
chebbi | 3:64a8188c5a44 | 14 | |
chebbi | 4:6c3cdc717a1f | 15 | LSM9DS1 lol(PC4, PC5,0xD6, 0x3D); |
jmar7 | 0:e8167f37725c | 16 | int main() { |
jmar7 | 0:e8167f37725c | 17 | //LSM9DS1 lol(p9, p10, 0x6B, 0x1E); |
chebbi | 3:64a8188c5a44 | 18 | |
jmar7 | 0:e8167f37725c | 19 | lol.begin(); |
jmar7 | 0:e8167f37725c | 20 | if (!lol.begin()) { |
jmar7 | 0:e8167f37725c | 21 | pc.printf("Failed to communicate with LSM9DS1.\n"); |
chebbi | 3:64a8188c5a44 | 22 | while(1) ; |
jmar7 | 0:e8167f37725c | 23 | } |
chebbi | 4:6c3cdc717a1f | 24 | |
chebbi | 4:6c3cdc717a1f | 25 | //lol.calibrateMag() ; |
jmar7 | 0:e8167f37725c | 26 | while(1) { |
chebbi | 3:64a8188c5a44 | 27 | |
chebbi | 3:64a8188c5a44 | 28 | //lol.readTemp(); |
chebbi | 3:64a8188c5a44 | 29 | |
chebbi | 3:64a8188c5a44 | 30 | if ( lol.magAvailable() ) |
chebbi | 3:64a8188c5a44 | 31 | { |
jmar7 | 0:e8167f37725c | 32 | lol.readMag(); |
chebbi | 3:64a8188c5a44 | 33 | } |
chebbi | 4:6c3cdc717a1f | 34 | |
chebbi | 3:64a8188c5a44 | 35 | |
chebbi | 4:6c3cdc717a1f | 36 | |
chebbi | 4:6c3cdc717a1f | 37 | |
chebbi | 3:64a8188c5a44 | 38 | printfMag(); // printfff "M: mx, my, mz" |
chebbi | 3:64a8188c5a44 | 39 | pc.printf("\n") ; |
chebbi | 3:64a8188c5a44 | 40 | // printff the heading and orientation for fun! |
chebbi | 3:64a8188c5a44 | 41 | // Call printfff attitude. The LSM9DS1's mag x and y |
chebbi | 3:64a8188c5a44 | 42 | // axes are opposite to the accelerometer, so my, mx are |
chebbi | 3:64a8188c5a44 | 43 | // substituted for each other. |
chebbi | 4:6c3cdc717a1f | 44 | printfAttitude(-lol.my, -lol.mx, lol.mz); |
chebbi | 3:64a8188c5a44 | 45 | pc.printf("\n") ; |
chebbi | 3:64a8188c5a44 | 46 | wait(1); |
chebbi | 3:64a8188c5a44 | 47 | } |
chebbi | 3:64a8188c5a44 | 48 | } |
jmar7 | 0:e8167f37725c | 49 | |
chebbi | 4:6c3cdc717a1f | 50 | |
chebbi | 3:64a8188c5a44 | 51 | |
chebbi | 3:64a8188c5a44 | 52 | |
chebbi | 4:6c3cdc717a1f | 53 | |
chebbi | 3:64a8188c5a44 | 54 | |
chebbi | 3:64a8188c5a44 | 55 | void printfMag() |
chebbi | 3:64a8188c5a44 | 56 | { |
chebbi | 3:64a8188c5a44 | 57 | // Now we can use the mx, my, and mz variables as we please. |
chebbi | 3:64a8188c5a44 | 58 | // Either printfff them as raw ADC values, or calculated in Gauss. |
chebbi | 3:64a8188c5a44 | 59 | pc.printf("M: "); |
chebbi | 4:6c3cdc717a1f | 60 | |
chebbi | 3:64a8188c5a44 | 61 | // If you want to printffff calculated values, you can use the |
chebbi | 3:64a8188c5a44 | 62 | // calcMag helper function to convert a raw ADC value to |
chebbi | 3:64a8188c5a44 | 63 | // Gauss. Give the function the value that you want to convert. |
chebbi | 4:6c3cdc717a1f | 64 | pc.printf("mx= %f" , lol.calcMag(lol.mx), 2); |
chebbi | 3:64a8188c5a44 | 65 | pc.printf(", "); |
chebbi | 4:6c3cdc717a1f | 66 | pc.printf("my= %f" , lol.calcMag(lol.my), 2); |
chebbi | 3:64a8188c5a44 | 67 | pc.printf(", "); |
chebbi | 4:6c3cdc717a1f | 68 | pc.printf("mz= %f " , lol.calcMag(lol.mz), 2); |
chebbi | 4:6c3cdc717a1f | 69 | pc.printf(" gauss \n"); |
chebbi | 4:6c3cdc717a1f | 70 | pc.printf(" ***Raw data ****"); |
chebbi | 4:6c3cdc717a1f | 71 | pc.printf(" \n"); |
chebbi | 4:6c3cdc717a1f | 72 | pc.printf("%d" ,lol.mx); |
chebbi | 3:64a8188c5a44 | 73 | pc.printf(", "); |
chebbi | 4:6c3cdc717a1f | 74 | pc.printf("%d" ,lol.my); |
chebbi | 3:64a8188c5a44 | 75 | pc.printf(", "); |
chebbi | 4:6c3cdc717a1f | 76 | pc.printf("%d" ,lol.mz); |
chebbi | 4:6c3cdc717a1f | 77 | |
chebbi | 3:64a8188c5a44 | 78 | } |
chebbi | 3:64a8188c5a44 | 79 | |
chebbi | 4:6c3cdc717a1f | 80 | void printfAttitude( float hx, float hy, float mz) |
chebbi | 3:64a8188c5a44 | 81 | { |
chebbi | 3:64a8188c5a44 | 82 | |
chebbi | 3:64a8188c5a44 | 83 | float heading; |
chebbi | 4:6c3cdc717a1f | 84 | |
chebbi | 4:6c3cdc717a1f | 85 | if (hy > 0) |
chebbi | 4:6c3cdc717a1f | 86 | { |
chebbi | 4:6c3cdc717a1f | 87 | heading = 90 - (atan(hx / hy) * (180 / M_PI)); |
chebbi | 4:6c3cdc717a1f | 88 | } |
chebbi | 4:6c3cdc717a1f | 89 | else if (hy < 0) |
chebbi | 4:6c3cdc717a1f | 90 | { |
chebbi | 4:6c3cdc717a1f | 91 | heading = - (atan(hx / hy) * (180 / M_PI)); |
chebbi | 4:6c3cdc717a1f | 92 | } |
chebbi | 4:6c3cdc717a1f | 93 | else // hy = 0 |
chebbi | 4:6c3cdc717a1f | 94 | { |
chebbi | 4:6c3cdc717a1f | 95 | if (hx < 0) heading = 180; |
chebbi | 4:6c3cdc717a1f | 96 | else heading = 0; |
chebbi | 4:6c3cdc717a1f | 97 | } |
chebbi | 3:64a8188c5a44 | 98 | |
chebbi | 3:64a8188c5a44 | 99 | |
chebbi | 3:64a8188c5a44 | 100 | pc.printf("\n") ; |
chebbi | 3:64a8188c5a44 | 101 | pc.printf("Heading: "); pc.printf("%f" , heading, 2); |
chebbi | 4:6c3cdc717a1f | 102 | pc.printf("\n") ; |
chebbi | 3:64a8188c5a44 | 103 | |
chebbi | 3:64a8188c5a44 | 104 | } |
chebbi | 3:64a8188c5a44 | 105 | |
chebbi | 4:6c3cdc717a1f | 106 | |
chebbi | 3:64a8188c5a44 | 107 | |
chebbi | 3:64a8188c5a44 | 108 |