Marcell Rausch / BNO055_fusion_irq

Fork of BNO055_fusion by Marcell Rausch

Files at this revision

API Documentation at this revision

Comitter:
mrcrsch
Date:
Mon Feb 13 14:25:57 2017 +0000
Parent:
5:6a08a4c5b1e1
Commit message:
init;

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	Mon Jan 16 16:51:39 2017 +0000
+++ b/BNO055.cpp	Mon Feb 13 14:25:57 2017 +0000
@@ -426,6 +426,9 @@
     change_fusion_mode(current_mode);
 }
 
+
+
+
 /////////////// I2C Freq. /////////////////////////////////
 void BNO055::frequency(int hz)
 {
@@ -532,4 +535,44 @@
     la->x=Quat[0]*tempQuat[1] -Quat[1]*tempQuat[0] +Quat[2]*tempQuat[3] -Quat[3]*tempQuat[2];
     la->y=Quat[0]*tempQuat[2] +Quat[1]*tempQuat[3] -Quat[2]*tempQuat[0] +Quat[3]*tempQuat[1];
     la->z=Quat[0]*tempQuat[3] +Quat[1]*tempQuat[2] -Quat[2]*tempQuat[1] -Quat[3]*tempQuat[0];
-}
\ No newline at end of file
+}
+
+void BNO055::initIntr() {
+    uint16_t thresholdG = 500;
+    uint8_t slopeG = 0;
+    uint8_t durationG = 1;
+    
+    change_fusion_mode(CONFIGMODE);
+    wait_ms(20);
+    select_page(1);
+    // 1a. Set gyroscope interrupt on X, Y, and Z (any motion)
+    writechar(0x17, 0x47);
+    // 1b. Set gyroscope interrupt threshold
+    writechar(0x1E, ((0 & ~(0x7F)) | ((thresholdG << 0) & 0x7F)));
+    // 1c. Set gyroscope interrupt slope samples
+    writechar(0x1F, ((0 & ~(0x03)) | ((slopeG << 0) & 0x03)));
+    // 1d. Set gyroscope interrupt awake duration
+    writechar(0x1F, ((0 & ~(0x0C)) | ((durationG << 2) & 0x0C)));
+    
+    // 2. Set gyroscope interrupt mask
+    writechar(0x0F, ((0 & ~(0x04)) | ((0x01 << 2) & 0x04)));
+    
+    // 3. Set gyroscope interrupt
+    writechar(0x10, ((0 & ~(0x04)) | ((0x01 << 2) & 0x04)));
+    
+    // 4. Read gyroscope interrupt status
+    select_page(0);
+    readchar(BNO055_INTR_STAT);
+    intr = rx;
+}
+
+void BNO055::resetIntr(){
+    readchar(BNO055_SYS_TRIGGER);
+    rx |= 0x40;
+    writechar(BNO055_SYS_TRIGGER, rx);
+}
+
+void BNO055::setpowermode(char pmode){
+    writechar(BNO055_PWR_MODE,pmode);
+    pwr_mode = pmode;
+}
--- a/BNO055.h	Mon Jan 16 16:51:39 2017 +0000
+++ b/BNO055.h	Mon Feb 13 14:25:57 2017 +0000
@@ -285,6 +285,9 @@
     void get_quaternion_float(float *Q);
     
     void configure_accelerometer_range(uint8_t range);
+    void initIntr();
+    void resetIntr();
+    void setpowermode(char pmode);
     
 protected:
     void initialize(void);
@@ -303,6 +306,7 @@
     uint8_t  chip_mode;
     uint8_t  ready_flag;
     uint8_t  page_flag;
+    uint8_t  pwr_mode;
 
     uint8_t  chip_id;
     uint8_t  acc_id;
@@ -311,10 +315,30 @@
     uint8_t  bootldr_rev_id;
     uint16_t sw_rev_id;
     
+    char intr;
+    char rx,tx[2];
+    
+    
+    
+    
+void readchar(char location){
+    tx[0] = location;
+    _i2c.write(chip_addr,tx,1,true);
+    _i2c.read(chip_addr,&rx,1,false);
+}
+ 
+void writechar(char location, char value){
+    tx[0] = location;
+    tx[1] = value;
+    _i2c.write(chip_addr,tx,2);
+}
     
 
 };
 
+
+
+
 //---------------------------------------------------------
 //----- Register's definition -----------------------------
 //---------------------------------------------------------