Mark Peter Vargha / BNO055

Dependents:   Project Campus_Safety_Bot

Fork of BNO055 by Dave Turner

Files at this revision

API Documentation at this revision

Comitter:
StressedDave
Date:
Sat May 30 19:08:59 2015 +0000
Parent:
1:2c3322a8d417
Child:
3:1db1628eb8b2
Commit message:
Added initial documentation. Added function to read Euler angles

Changed in this revision

BNO055.cpp Show annotated file Show diff for this revision Revisions of this file
BNO055.h Show annotated file Show diff for this revision Revisions of this file
--- a/BNO055.cpp	Sat May 30 18:36:36 2015 +0000
+++ b/BNO055.cpp	Sat May 30 19:08:59 2015 +0000
@@ -194,6 +194,19 @@
     quat.z = float(quat.rawz)/16384.0f;
 }
 
+void BNO055::get_angles(void){
+    tx[0] = BNO055_EULER_H_LSB_ADDR;
+    _i2c.write(address,tx,1,true);  
+    _i2c.read(address+1,rawdata,6,0); 
+    angles.rawyaw = (rawdata[1] << 8 | rawdata[0]);
+    angles.rawroll = (rawdata[3] << 8 | rawdata[2]);
+    angles.rawpitch = (rawdata[5] << 8 | rawdata[4]);
+    angles.yaw = float(angles.rawyaw)*angle_scale;
+    angles.roll = float(angles.rawroll)*angle_scale;
+    angles.pitch = float(angles.rawpitch)*angle_scale;
+}
+
+
 void BNO055::get_temp(void){
     readchar(BNO055_TEMP_ADDR);
     temperature = rx / temp_scale;
--- a/BNO055.h	Sat May 30 18:36:36 2015 +0000
+++ b/BNO055.h	Sat May 30 19:08:59 2015 +0000
@@ -173,44 +173,82 @@
     char serial[16];
     }chip;
 
+/** Class for operating Bosch BNO055 sensor over I2C **/
 class BNO055 
 { 
 public: 
 
+/** Create BNO055 instance **/
     BNO055(PinName SDA, PinName SCL); 
+    
+/** Perform a power-on reset of the BNO055 **/
     void reset();
+/** Check that the BNO055 is connected and download the software details 
+and serial number of chip and store in ID structure **/
     bool check();
+/** Turn the external timing crystal on/off **/
     void SetExternalCrystal(bool yn);
-    
+/** Set the operation mode of the sensor **/    
     void setmode(char mode);
+/** Set the power mode of the sensor **/
     void setpowermode(char mode);
     
+/** Set the output units from the accelerometer, either MPERSPERS or MILLIG **/
     void set_accel_units(char units);
+/** Set the output units from the gyroscope, either DEG_PER_SEC or RAD_PER_SEC **/
     void set_anglerate_units(char units);
+/** Set the output units from the IMU, either DEGREES or RADIANS **/
     void set_angle_units(char units);
+/** Set the output units from the temperature sensor, either CENTIGRADE or FAHRENHEIT **/
     void set_temp_units(char units);
+/** Set the data output format to either WINDOWS or ANDROID **/    
     void set_orientation(char units);
+/** Set the mapping of the exes/directions as per page 25 of datasheet
+    range 0-7, any value outside this will set the orientation to P1 (default at power up) **/
     void set_mapping(char orient);
     
+/** Get the current values from the accelerometer **/
     void get_accel(void);
+/** Get the current values from the gyroscope **/
     void get_gyro(void);
+/** Get the current values from the magnetometer **/
     void get_mag(void);
+/** Get the corrected linear acceleration **/
     void get_lia(void);
+/** Get the current gravity vector **/
     void get_grv(void);
+/** Get the output quaternion **/
     void get_quat(void);
+/** Get the current Euler angles **/
+    void get_angles(void);
+/** Get the current temperature **/
     void get_temp(void);
 
+/** Read the calibration status register and store the result in the calib variable **/
     void get_calib(void);
+/** Read the offset and radius values into the calibration array**/
     void read_calibration_data(void);
+/** Write the contents of the calibration array into the registers **/    
     void write_calibration_data(void);
     
+/** Structures containing 3-axis data for acceleration, rate of turn and magnetic field.
+    x,y,z are the scale floating point values and
+    rawx, rawy, rawz are the int16_t values read from the sensors **/
     values accel,gyro,mag,lia,gravity;
+/** Stucture containing the Euler angles as yaw, pitch, roll as scaled floating point
+    and rawyaw, rawroll & rollpitch as the int16_t values loaded from the registers **/
     angles euler;
+/** Quaternion values as w,x,y,z (scaled floating point) and raww etc... as int16_t loaded from the
+    registers **/    
     quaternion quat;
+
+/** Current contents of calibration status register **/
     char calib;
-    char status;
+/** Contents of the 22 registers containing offset and radius values used as calibration by the sensor **/
     char calibration[22];
+/** Structure containing sensor numbers, software version and chip UID
     chip ID;
+/** Current temperature **/
     int temperature;
     
     private: