Ultrasound sensor and IMU combined
Dependencies: HCSR04 X_NUCLEO_6180XA1 mbed
Fork of HelloWorld_6180XA1 by
Revision 50:453855ed9372, committed 2018-05-09
- Comitter:
- EmbeddedSam
- Date:
- Wed May 09 14:43:53 2018 +0000
- Parent:
- 49:0610f88d1d65
- Commit message:
- initial commit;
Changed in this revision
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); +// } +//}