eCompass (6-axes electronic compass) / Electronic Compass with Three-axis Magnetic Field Sensor and Three-axis Accelerometer by Bosch Sensortech

Dependents:   BLE_EddystoneBeacon_w_ACC_TY51822

Revision:
1:b022f8d7884d
Parent:
0:8de5e2fd5c48
Child:
2:93141eb80862
--- a/BMC050.h	Sun Jul 20 13:16:25 2014 +0000
+++ b/BMC050.h	Sun Sep 07 07:15:37 2014 +0000
@@ -7,7 +7,7 @@
  *  http://www.page.sannet.ne.jp/kenjia/index.html
  *  http://mbed.org/users/kenjiArai/
  *      Created: July      19th, 2014 
- *      Revised: July      20th, 2014
+ *      Revised: September  7th, 2014
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
@@ -21,7 +21,7 @@
 
 #include "mbed.h"
 
-////////////// ADDRESS DEFINITION /////////////////////////////////////////////
+////////////// ADDRESS DEFINITION ///////////////
 //  BMC050 Address/accelerometer
 //  7bit address = 0b001100x(0x18 or 0x19 depends on SDO)
 //      -> 8bit = 0b001100x0(0x30,0x32) -> 0x31,0x33(Read) or 0x30,0x32(Write)
@@ -34,13 +34,14 @@
 #define BMC050_M_GV_CHIP_ADDR  0x22    // CSB2 pin = Ground, SDO pin = Vdd
 #define BMC050_M_VG_CHIP_ADDR  0x24    // CSB2 pin = Vdd, SDO pin = Ground
 #define BMC050_M_VV_CHIP_ADDR  0x26    // CSB2 pin = Vdd, SDO pin = Vdd
+#define BMC050_MAG_NOT_USED_ADDR  0xff // If you only used acc and keep mag as suspend
 
 //   BMC050 ACC ID
 #define I_AM_BMC050_ACC          0x03
 //   BMC050 ACC ID
 #define I_AM_BMC050_MAG          0x32
 
-////////////// REGISTER DEFINITION ////////////////////////////////////////////
+////////////// REGISTER DEFINITION //////////////
 //      accelerometer
 #define BMC050_A_WHO_AM_I        0x00
 // reserved
@@ -91,7 +92,7 @@
 #define BMC050_M_REPETITION_XY   0x51
 #define BMC050_M_REPETITION_Z    0x51
 
-////////////// CONTROL DEFINITION /////////////////////////////////////////////
+////////////// CONTROL DEFINITION ///////////////
 // Full Scale
 #define BMC050_FS_2G           0x03
 #define BMC050_FS_4G           0x05
@@ -121,8 +122,9 @@
 // definition for Nomalization 
 #define GRAVITY                (9.80665F)
 #define BMC050_GAIN            (3.91F)
+#define BMC050_DUMMY           0
 
-////////////// DATA TYPE DEFINITION ///////////////////////////////////////////
+////////////// DATA TYPE DEFINITION /////////////
 typedef struct {
   uint8_t addr;
   uint8_t g_range;
@@ -146,11 +148,18 @@
  *    BMC050_FS_2G,         // G-range slection 
  *    BMC050_BW_250,        // Bandwidth
  * };
- *   
+ * 
+ * #if 1  
  * const BMC050MAG_TypeDef mag_parameter = {
  *    BMC050_M_GG_CHIP_ADDR,// I2C Address
  *    BMC050_DR_10          // Data Rate
  * };
+ * #else // If you would like to keep "Suspend mode" for mag
+ * const BMC050MAG_TypeDef mag_parameter = {
+ *    BMC050_MAG_NOT_USED_ADDR,// Not use mag sensor
+ *    BMC050_DUMMY          // dummy
+ * };
+ * #endif
  *
  * // I2C Communication
  * I2C i2c(dp5,dp27);       // SDA, SCL
@@ -194,6 +203,13 @@
       */
     void read_data_acc(float *dt);
 
+    /** Read a float type data from accelerometer
+      * @param float type of three arry's address, e.g. float dt[3];
+      * @return acc motion data unit: mg
+      * @return dt[0]->x, dt[1]->y, dt[2]->z 
+      */
+    void read_mg_acc(float *dt);
+
     /** Read a float type data from magnetometer
       * @param float type of three arry's address, e.g. float dt[3];
       * @return magnettic field data unit: uT(micro T)
@@ -236,21 +252,36 @@
       * @return register data
       */
     uint8_t read_reg_acc(uint8_t addr);
+    
+    /** Read register (general purpose)
+      * @param register's address
+      * @return register data
+      */
     uint8_t read_reg_mag(uint8_t addr);
 
+    /** Set I2C clock frequency
+      * @param freq.
+      * @return none
+      */
+    void frequency(int hz);
+
     /** Write register (general purpose)
       * @param register's address
       * @param data
       * @return none
       */
     void write_reg_acc(uint8_t addr, uint8_t data);
+
+    /** Write register (general purpose)
+      * @param register's address
+      * @param data
+      * @return none
+      */
     void write_reg_mag(uint8_t addr, uint8_t data);
 
 protected:
     void initialize(const BMC050ACC_TypeDef *acc_parameter,
                     const BMC050MAG_TypeDef *mag_parameter);
-    void i2c_read_n_bytes(int, char*, int);
-    void i2c_write_n_bytes(int, char*, int);
 
     I2C i2c;