Programme that use the module 9DOF from adafruit. Communicate with LSM303DLH and a L3GD20 by I2C.

Dependencies:   L3GD20 LSM303DLH debug_addon_graphique_ASCII mbed

Committer:
salco
Date:
Mon Aug 07 01:29:10 2017 +0000
Revision:
1:7d60cdcb1d3c
Parent:
0:cd2253d77edc
everything is publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 0:cd2253d77edc 1 #include "mbed.h"
salco 0:cd2253d77edc 2 //#include "debug.h"
salco 0:cd2253d77edc 3
salco 0:cd2253d77edc 4 #include "LSM303DLH.h"
salco 0:cd2253d77edc 5 #include "AnsiGraphicalConsole.h"
salco 0:cd2253d77edc 6 #include "vector.h"
salco 0:cd2253d77edc 7 #include "L3GD20.h"
salco 0:cd2253d77edc 8
salco 0:cd2253d77edc 9 #define LSM303_REG_TEMP (0x00) // Temperature Register
salco 0:cd2253d77edc 10 #define LSM303_REG_CONF (0x01) // Configuration Register
salco 0:cd2253d77edc 11 #define LSM303_ADDR (0x90) // LSM303 address
salco 0:cd2253d77edc 12
salco 0:cd2253d77edc 13
salco 0:cd2253d77edc 14 #define USE_LM303
salco 0:cd2253d77edc 15 #define USE_L3GD20
salco 0:cd2253d77edc 16 DigitalIn mybutton(USER_BUTTON);
salco 0:cd2253d77edc 17 I2C ptr_i2c(I2C_SDA, I2C_SCL);
salco 0:cd2253d77edc 18 #if defined(USE_L3GD20)
salco 0:cd2253d77edc 19 L3GD20 gyro(&ptr_i2c);//(I2C_SDA, I2C_SCL);
salco 0:cd2253d77edc 20 #endif
salco 0:cd2253d77edc 21 #if defined(USE_LM303)
salco 0:cd2253d77edc 22 LSM303DLH compass(&ptr_i2c);//(I2C_SDA, I2C_SCL);
salco 0:cd2253d77edc 23 #endif
salco 0:cd2253d77edc 24
salco 0:cd2253d77edc 25 DigitalOut myled(LED1);
salco 0:cd2253d77edc 26
salco 0:cd2253d77edc 27 Serial pc(SERIAL_TX, SERIAL_RX);
salco 0:cd2253d77edc 28
salco 0:cd2253d77edc 29 //volatile char TempCelsiusDisplay[] = "+abc.d C";
salco 0:cd2253d77edc 30
salco 0:cd2253d77edc 31 int main()
salco 0:cd2253d77edc 32 {
salco 0:cd2253d77edc 33
salco 0:cd2253d77edc 34 pc.printf("\n Test Salco \n");
salco 0:cd2253d77edc 35 clearscreen();
salco 0:cd2253d77edc 36
salco 0:cd2253d77edc 37 /*char data_write[2];
salco 0:cd2253d77edc 38 char data_read[2];*/
salco 0:cd2253d77edc 39
salco 0:cd2253d77edc 40 /* Configure the Temperature sensor device STLM75:
salco 0:cd2253d77edc 41 - Thermostat mode Interrupt
salco 0:cd2253d77edc 42 - Fault tolerance: 0
salco 0:cd2253d77edc 43 */
salco 0:cd2253d77edc 44 //data_write[0] = LM75_REG_CONF;
salco 0:cd2253d77edc 45 // data_write[1] = 0x02;
salco 0:cd2253d77edc 46 // int status =
salco 0:cd2253d77edc 47 /*if (status != 0) { // Error
salco 0:cd2253d77edc 48 while (1) {
salco 0:cd2253d77edc 49 myled = !myled;
salco 0:cd2253d77edc 50 wait(0.2);
salco 0:cd2253d77edc 51 }
salco 0:cd2253d77edc 52 }*/
salco 0:cd2253d77edc 53
salco 0:cd2253d77edc 54 #if defined(USE_LM303)
salco 0:cd2253d77edc 55 //compass.setOffset(29.50, -0.50, 4.00); // example calibration
salco 0:cd2253d77edc 56 compass.setScale(1.00,1.00,1.00); //1.03, 1.21); // example calibration
salco 0:cd2253d77edc 57 compass.frequency(100000);
salco 0:cd2253d77edc 58 vector accelerometer,magnetometer;
salco 0:cd2253d77edc 59 float hdg;
salco 0:cd2253d77edc 60 #endif
salco 0:cd2253d77edc 61
salco 0:cd2253d77edc 62 #if defined(USE_L3GD20)
salco 0:cd2253d77edc 63 vector gyroscope;
salco 0:cd2253d77edc 64 #endif
salco 0:cd2253d77edc 65 char index=0;
salco 0:cd2253d77edc 66
salco 0:cd2253d77edc 67 while (1) {
salco 0:cd2253d77edc 68
salco 0:cd2253d77edc 69
salco 0:cd2253d77edc 70 //hdg = compass.heading();
salco 0:cd2253d77edc 71 //debug.printf("Heading: %.2f\n", hdg);
salco 0:cd2253d77edc 72
salco 0:cd2253d77edc 73 // Display result
salco 0:cd2253d77edc 74 //pc.printf("Heading: %.2f\n", hdg);
salco 0:cd2253d77edc 75 myled = !myled;
salco 0:cd2253d77edc 76 if(index>=2)
salco 0:cd2253d77edc 77 {
salco 0:cd2253d77edc 78 #if defined(USE_LM303)
salco 0:cd2253d77edc 79 if(compass.read(accelerometer,magnetometer))
salco 0:cd2253d77edc 80 {
salco 0:cd2253d77edc 81 setText(0,10,"accelerometer: X:%.2f Y:%.2f Z:%.2f\n", accelerometer.x,accelerometer.y,accelerometer.z);
salco 0:cd2253d77edc 82 setText(0,11,"magnetometer: X:%.4f Y:%.4f Z:%.4f\n", magnetometer.x,magnetometer.y,magnetometer.z);
salco 0:cd2253d77edc 83
salco 0:cd2253d77edc 84
salco 0:cd2253d77edc 85 hdg = compass.heading((vector){0,0,-1});
salco 0:cd2253d77edc 86 setText(0,12,"Heading: %.2f\n", hdg);
salco 0:cd2253d77edc 87 //magnetometre {+-20@ 0}== axe nord/sud
salco 0:cd2253d77edc 88 //si X pos coter NORD et si X neg SUD
salco 0:cd2253d77edc 89 }
salco 0:cd2253d77edc 90 else
salco 0:cd2253d77edc 91 {
salco 0:cd2253d77edc 92 pc.printf("Error with I2C com\n");
salco 0:cd2253d77edc 93 }
salco 0:cd2253d77edc 94 #endif
salco 0:cd2253d77edc 95 index=0;
salco 0:cd2253d77edc 96 #if defined(USE_L3GD20)
salco 0:cd2253d77edc 97 if(gyro.read(&gyroscope.x,&gyroscope.y,&gyroscope.z))
salco 0:cd2253d77edc 98 {
salco 0:cd2253d77edc 99 gyro.Convert_to_RadPerSec(&gyroscope.x,&gyroscope.y,&gyroscope.z);
salco 0:cd2253d77edc 100 setText(0,13,"gyroscope: X:%.2f Y:%.2f Z:%.2f\n", gyroscope.x,gyroscope.y,gyroscope.z);
salco 0:cd2253d77edc 101 }
salco 0:cd2253d77edc 102 else
salco 0:cd2253d77edc 103 {
salco 0:cd2253d77edc 104 pc.printf("Error with I2C com\n");
salco 0:cd2253d77edc 105
salco 0:cd2253d77edc 106 }
salco 0:cd2253d77edc 107 #endif
salco 0:cd2253d77edc 108 }
salco 0:cd2253d77edc 109
salco 0:cd2253d77edc 110 wait(.5);
salco 0:cd2253d77edc 111 index++;
salco 0:cd2253d77edc 112
salco 0:cd2253d77edc 113 if (mybutton == 0)
salco 0:cd2253d77edc 114 { // Button is pressed
salco 0:cd2253d77edc 115 do{
salco 0:cd2253d77edc 116 clearscreen();
salco 0:cd2253d77edc 117 setText(0,1,"PAUSE\n");
salco 0:cd2253d77edc 118 wait(2);
salco 0:cd2253d77edc 119 }while(mybutton != 0);
salco 0:cd2253d77edc 120 clearscreen();
salco 0:cd2253d77edc 121 }
salco 0:cd2253d77edc 122 }
salco 0:cd2253d77edc 123
salco 0:cd2253d77edc 124 }
salco 0:cd2253d77edc 125