LSM9DS1 with EFM32WG

Dependencies:   mbed PinDetect LSM9DS1_works

Dependents:   WORKS_VERSION_1_sERIAL_PROCESSING LSM9DS1_works

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?

UserRevisionLine numberNew 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