test angle measurement LSM6DS3

Dependencies:   ESC IMUfilter LSM6DS3 mbed

Files at this revision

API Documentation at this revision

Comitter:
rsmits
Date:
Sat Feb 03 15:21:25 2018 +0000
Parent:
1:0e63617e1965
Child:
3:78cf56b8eb21
Commit message:
test angle working

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Jan 17 20:43:09 2018 +0000
+++ b/main.cpp	Sat Feb 03 15:21:25 2018 +0000
@@ -6,20 +6,23 @@
 // refresh time. set to 500 for part 2 and 50 for part 4
 #define REFRESH_TIME_MS 100
 //Gravity at Earth's surface in m/s/s
-#define g0 9.812865328
-//Convert from degrees to radians.
-#define toRadians(x) (x * 0.01745329252)
+#define g0 9.812865328f
+//Convert from degrees to radians. radians = (degrees*pi)/180
+#define toRadians(x) (x * 0.01745329252f)
+//Convert from radians to degrees.
+#define toDegrees(x) (x * 57.2957795)
 
 const int   LSM6DS3_ADDRESS = 0xD4;
-int PERIOD = 20;
+float       DEGREES[3];
+float       ACCELERATIONS[3];
+float       ANGLES[3];
+//const int   LSM6DS3_ADDRESS = 0x69;
 
-//float       MOTOR_PRINT; 
 Serial      pc(SERIAL_TX, SERIAL_RX); 
-ESC         MOTOR(PA_8, PERIOD);
 AnalogIn    PRESSURE_SENSOR(PA_0);
-//Ticker      UpdateScreen;
-LSM6DS3     imu(PF_0, PF_1, LSM6DS3_ADDRESS);
-IMUfilter imuFilter(REFRESH_TIME_MS/1000, 10);
+LSM6DS3     imu(PB_9, PB_8, LSM6DS3_ADDRESS);
+IMUfilter   imuFilter(0.1, 10);
+Ticker      ScreenTicker; 
 
 //Init Serial port and LSM6DS3 chip
 void setup()
@@ -43,58 +46,64 @@
     pc.printf("LSM6DS3 WHO_AM_I's returned: 0x%X\r\n", status);
     pc.printf("Should be 0x69\r\n");
 }
+
+void screenUpdate(){
+    pc.printf("Accel (m/s^2):\r\n");
+    pc.printf("AX: %2f\r\n", ACCELERATIONS[0]);
+    pc.printf("AY: %2f\r\n", ACCELERATIONS[1]);
+    pc.printf("AZ: %2f\r\n", ACCELERATIONS[2]);
+
+    pc.printf("Gyro (degrees/s):\r\n");
+    pc.printf("GX: %f\r\n", DEGREES[0]);
+    pc.printf("GY: %f\r\n", DEGREES[1]);
+    pc.printf("GZ: %2f\r\n", DEGREES[2]);
+    
+    pc.printf("Angle (degrees):\r\n");
+    pc.printf("X: %f\r\n", ANGLES[0]);
+    pc.printf("Y: %f\r\n", ANGLES[1]);
+    pc.printf("Z: %f\r\n\r\n", ANGLES[2]); 
+}
  
 int main()
 {
-    //MOTOR.setThrottle(0.0); 
     bool started = false;
-    
     while (true){
         
-        if(PRESSURE_SENSOR > 0.9){
+        if(PRESSURE_SENSOR > 0.9f){
             
             if (not started){
                 setup();  //Setup sensor and Serial
                 pc.printf("\r\n------ LSM6DS3 Demo -----------\r\n");
                 started=true;
+                ScreenTicker.attach(&screenUpdate, 1);
             }
- 
-//            imu.readTemp();
-//            pc.printf("Temp:\r\n");
-//            pc.printf("TC: %2f\r\n", imu.temperature_c);
-//            pc.printf("TF: %2f\r\n", imu.temperature_f);
-//            
+            
+            wait_ms(REFRESH_TIME_MS);     
             imu.readAccel();
-//            pc.printf("Accel:\r\n");
-//            pc.printf("AX: %2f\r\n", imu.ax);
-//            pc.printf("AY: %2f\r\n", imu.ay);
-//            pc.printf("AZ: %2f\r\n", imu.az);
-//     
             imu.readGyro();
-//            pc.printf("Gyro:\r\n");
-//            pc.printf("GX: %2f\r\n", imu.gx);
-//            pc.printf("GY: %2f\r\n", imu.gy);
-//            pc.printf("GZ: %2f\r\n\r\n", imu.gz);
+            
             
-            // radians = (degrees*pi)/180
-            double rx = (imu.gx*PI)/180; 
-            double ry = (imu.gy*PI)/180;
-            double rz = (imu.gz*PI)/180;
+            DEGREES[0] = imu.gx;
+            DEGREES[1] = imu.gy;
+            DEGREES[2] = imu.gz;
             
             // m/(s^2) = g0*g
-            double mx = g0*imu.ax;
-            double my = g0*imu.ay;
-            double mz = g0*imu.az;
+            ACCELERATIONS[0] = g0*imu.ax;
+            ACCELERATIONS[1] = g0*imu.ay;
+            ACCELERATIONS[2] = g0*imu.az;
+                        
+            imuFilter.updateFilter(toRadians(imu.gx), toRadians(imu.gy), toRadians(imu.gz), 
+                                   g0*imu.ax, g0*imu.ay, g0*imu.az);
+            imuFilter.computeEuler();
             
-            imuFilter.updateFilter(rx, ry, rz, mx, my, mz);
-            imuFilter.computeEuler();
-            pc.printf("%f, %f, %f\r\n\r\n", imuFilter.getRoll(), imuFilter.getPitch(), imuFilter.getYaw());
-           
-            wait_ms(REFRESH_TIME_MS);
+            ANGLES[0] = toDegrees(imuFilter.getRoll());
+            ANGLES[1] = toDegrees(imuFilter.getPitch());
+            ANGLES[2] = toDegrees(imuFilter.getYaw());            
         }
         else {
             started=false;
             imuFilter.reset();
+            ScreenTicker.detach();
         }
     }
 }