Ultrasound sensor and IMU combined

Dependencies:   HCSR04 X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1 by ST

Files at this revision

API Documentation at this revision

Comitter:
EmbeddedSam
Date:
Wed May 09 14:43:53 2018 +0000
Parent:
49:0610f88d1d65
Commit message:
initial commit;

Changed in this revision

BNO055_fusion.lib Show annotated file Show diff for this revision Revisions of this file
X_NUCLEO_6180XA1.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 0610f88d1d65 -r 453855ed9372 BNO055_fusion.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BNO055_fusion.lib	Wed May 09 14:43:53 2018 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/kenjiArai/code/BNO055_fusion/#9e6fead1e93e
diff -r 0610f88d1d65 -r 453855ed9372 X_NUCLEO_6180XA1.lib
--- a/X_NUCLEO_6180XA1.lib	Thu Apr 27 09:39:47 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://developer.mbed.org/users/EmbeddedSam/code/X_NUCLEO_6180XA1/#0643cd43b10f
diff -r 0610f88d1d65 -r 453855ed9372 main.cpp
--- a/main.cpp	Thu Apr 27 09:39:47 2017 +0000
+++ b/main.cpp	Wed May 09 14:43:53 2018 +0000
@@ -1,39 +1,40 @@
 /*
-   This VL6180X Expansion board test application performs a range measurement
-   and als measurement in polling mode on the onboard embedded top sensor. 
-   The result of both the measures are printed on the serial over.  
-   get_distance() and get_lux() are synchronous! They block the caller until the
-   result will be ready.
+	Ultrasound and IMU Demo
+	Sam Walsh 2018
 */
 
 
 /* Includes ------------------------------------------------------------------*/
 
 #include "mbed.h"
-#include "XNucleo6180XA1.h"
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
 #include "hcsr04.h"
+#include    "BNO055.h"
 
 
 /* Definitions ---------------------------------------------------------------*/
 
-#define VL6180X_I2C_SDA   D14 
-#define VL6180X_I2C_SCL   D15 
-
-
 /* Variables -----------------------------------------------------------------*/
 
-static XNucleo6180XA1 *board = NULL;
-float distance;
+HCSR04 UltrasonicSensor(D7,D8); //Trigger,Echo 
+Serial pc(USBTX, USBRX); // tx, rx
+I2C    i2c(D4, D5); // SDA, SCL
+BNO055 imu(i2c, D6);  // Reset =D6, addr = BNO055_G_CHIP_ADDR, mode = MODE_NDOF <- as default
 
+Timer t;
 
-HCSR04 UltrasonicSensor(PC_2,PC_3); //Trigger,Echo 
-//Serial pc_serial(USBTX, USBRX); // tx, rx
+//  RAM -------------------------------------------------------------------------------------------
+BNO055_ID_INF_TypeDef       bno055_id_inf;
+BNO055_EULER_TypeDef        euler_angles;
+BNO055_QUATERNION_TypeDef   quaternion;
+BNO055_LIN_ACC_TypeDef      linear_acc;
+BNO055_GRAVITY_TypeDef      gravity;
+BNO055_TEMPERATURE_TypeDef  chip_temp;
 
-
+float distance;
 
 /* Functions -----------------------------------------------------------------*/
 
@@ -43,26 +44,53 @@
 =============================================================================*/
 int main()
 { 
-	int status;
 	pc.baud(921600);
-	uint32_t lux, dist;
-	DevI2C *device_i2c = new DevI2C(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
-
-	/* Creates the 6180XA1 expansion board singleton obj. */
-	board = XNucleo6180XA1::instance(device_i2c, A3, A2, D13, D2);
+	pc.printf ("Hello World \n\r"); 
+	imu.set_mounting_position(MT_P6);
+    // Is BNO055 avairable?
+    if (imu.chip_ready() == 0){
+        do {
+            pc.printf("Bosch BNO055 is NOT avirable!!\r\n Reset\r\n");
+        } while(imu.reset());
+    }
+    pc.printf("Bosch BNO055 is available now!!\r\n");
+    pc.printf("AXIS_REMAP_CONFIG:0x%02x, AXIS_REMAP_SIGN:0x%02x\r\n",
+               imu.read_reg0(BNO055_AXIS_MAP_CONFIG), imu.read_reg0(BNO055_AXIS_MAP_SIGN));    
+    imu.read_id_inf(&bno055_id_inf);
+    pc.printf("CHIP ID:0x%02x, ACC ID:0x%02x, MAG ID:0x%02x, GYR ID:0x%02x, ",
+        bno055_id_inf.chip_id, bno055_id_inf.acc_id, bno055_id_inf.mag_id, bno055_id_inf.gyr_id);
+    pc.printf("SW REV:0x%04x, BL REV:0x%02x\r\n",
+        bno055_id_inf.sw_rev_id, bno055_id_inf.bootldr_rev_id);
 
-	/* Initializes the 6180XA1 expansion board with default values. */
-	status = board->init_board();
-	if (status) {
-		printf("Failed to init board!\n\r");
-		return 0;
-	}
+    pc.printf("[E]:Euler Angles[deg],[Q]:Quaternion[],[L]:Linear accel[m/s*s],");
+    pc.printf("[G]:Gravity vector[m/s*s],[T]:Chip temperature,Acc,Gyr[degC],[S]:Status,[M]:time[mS]\r\n");
+    t.start();
+    while(1) {
+		pc.printf ("Ultrasound: %d \t", (int)distance);  
+		distance = UltrasonicSensor.distance(); 
+        imu.get_Euler_Angles(&euler_angles);
+        pc.printf("[E],Y,%+6.1f,R,%+6.1f,P,%+6.1f,",
+                   euler_angles.h, euler_angles.r, euler_angles.p);
+        imu.get_quaternion(&quaternion);
+        pc.printf("[Q],W,%d,X,%d,Y,%d,Z,%d,",
+                   quaternion.w, quaternion.x, quaternion.y, quaternion.z);
+        imu.get_linear_accel(&linear_acc);
+        pc.printf("[L],X,%+6.1f,Y,%+6.1f,Z,%+6.1f,",
+                   linear_acc.x, linear_acc.y, linear_acc.z);
+        imu.get_gravity(&gravity);
+        pc.printf("[G],X,%+6.1f,Y,%+6.1f,Z,%+6.1f,",
+                   gravity.x, gravity.y, gravity.z);
+        imu.get_chip_temperature(&chip_temp);
+        pc.printf("[T],%+d,%+d,",
+                   chip_temp.acc_chip, chip_temp.gyr_chip);
+        pc.printf("[S],0x%x,[M],%d\r\n",
+                   imu.read_calib_status(), t.read_ms());
+    }
+}
 
-	while (true) {
-		board->sensor_top->get_distance(&dist);
-		board->sensor_top->get_lux(&lux);
-		distance = UltrasonicSensor.distance();
-		printf ("Time of Flight: %d, Lux: %d, Ultrasound: %d \n\r", dist, lux, (int)distance);    
-        wait(0.01);
-	}
-}
+
+	//while(1){
+ 
+//    	wait(0.5);
+//    }
+//}