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

Committer:
kenjiArai
Date:
Sun Jul 20 13:16:25 2014 +0000
Revision:
0:8de5e2fd5c48
Child:
1:b022f8d7884d
1st release for Bosch Sensortec BMC050

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:8de5e2fd5c48 1 /*
kenjiArai 0:8de5e2fd5c48 2 * mbed library program
kenjiArai 0:8de5e2fd5c48 3 * BMC050 COMPASS 6 AXIS, made by Bosch Sensortec
kenjiArai 0:8de5e2fd5c48 4 * http://jp.bosch-sensortec.com/content/language1/html/5033.htm
kenjiArai 0:8de5e2fd5c48 5 *
kenjiArai 0:8de5e2fd5c48 6 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 0:8de5e2fd5c48 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:8de5e2fd5c48 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:8de5e2fd5c48 9 * Created: July 19th, 2014
kenjiArai 0:8de5e2fd5c48 10 * Revised: July 20th, 2014
kenjiArai 0:8de5e2fd5c48 11 *
kenjiArai 0:8de5e2fd5c48 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:8de5e2fd5c48 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:8de5e2fd5c48 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:8de5e2fd5c48 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:8de5e2fd5c48 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:8de5e2fd5c48 17 */
kenjiArai 0:8de5e2fd5c48 18
kenjiArai 0:8de5e2fd5c48 19 #ifndef BMC050_H
kenjiArai 0:8de5e2fd5c48 20 #define BMC050_H
kenjiArai 0:8de5e2fd5c48 21
kenjiArai 0:8de5e2fd5c48 22 #include "mbed.h"
kenjiArai 0:8de5e2fd5c48 23
kenjiArai 0:8de5e2fd5c48 24 ////////////// ADDRESS DEFINITION /////////////////////////////////////////////
kenjiArai 0:8de5e2fd5c48 25 // BMC050 Address/accelerometer
kenjiArai 0:8de5e2fd5c48 26 // 7bit address = 0b001100x(0x18 or 0x19 depends on SDO)
kenjiArai 0:8de5e2fd5c48 27 // -> 8bit = 0b001100x0(0x30,0x32) -> 0x31,0x33(Read) or 0x30,0x32(Write)
kenjiArai 0:8de5e2fd5c48 28 #define BMC050_A_G_CHIP_ADDR 0x30 // SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 29 #define BMC050_A_V_CHIP_ADDR 0x32 // SDO pin = Vdd
kenjiArai 0:8de5e2fd5c48 30 // BMC050 Address/magnetometer
kenjiArai 0:8de5e2fd5c48 31 // 7bit address = 0b001000x(0x10,0x11,0x12 or 0x13 depends on SDO and CSB2)
kenjiArai 0:8de5e2fd5c48 32 // -> 8bit = 0b00100xx0(0x20,0x22,0x24,0x26)
kenjiArai 0:8de5e2fd5c48 33 #define BMC050_M_GG_CHIP_ADDR 0x20 // CSB2 pin = Ground, SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 34 #define BMC050_M_GV_CHIP_ADDR 0x22 // CSB2 pin = Ground, SDO pin = Vdd
kenjiArai 0:8de5e2fd5c48 35 #define BMC050_M_VG_CHIP_ADDR 0x24 // CSB2 pin = Vdd, SDO pin = Ground
kenjiArai 0:8de5e2fd5c48 36 #define BMC050_M_VV_CHIP_ADDR 0x26 // CSB2 pin = Vdd, SDO pin = Vdd
kenjiArai 0:8de5e2fd5c48 37
kenjiArai 0:8de5e2fd5c48 38 // BMC050 ACC ID
kenjiArai 0:8de5e2fd5c48 39 #define I_AM_BMC050_ACC 0x03
kenjiArai 0:8de5e2fd5c48 40 // BMC050 ACC ID
kenjiArai 0:8de5e2fd5c48 41 #define I_AM_BMC050_MAG 0x32
kenjiArai 0:8de5e2fd5c48 42
kenjiArai 0:8de5e2fd5c48 43 ////////////// REGISTER DEFINITION ////////////////////////////////////////////
kenjiArai 0:8de5e2fd5c48 44 // accelerometer
kenjiArai 0:8de5e2fd5c48 45 #define BMC050_A_WHO_AM_I 0x00
kenjiArai 0:8de5e2fd5c48 46 // reserved
kenjiArai 0:8de5e2fd5c48 47 #define BMC050_A_OUT_X_L 0x02
kenjiArai 0:8de5e2fd5c48 48 #define BMC050_A_OUT_X_H 0x03
kenjiArai 0:8de5e2fd5c48 49 #define BMC050_A_OUT_Y_L 0x04
kenjiArai 0:8de5e2fd5c48 50 #define BMC050_A_OUT_Y_H 0x05
kenjiArai 0:8de5e2fd5c48 51 #define BMC050_A_OUT_Z_L 0x06
kenjiArai 0:8de5e2fd5c48 52 #define BMC050_A_OUT_Z_H 0x07
kenjiArai 0:8de5e2fd5c48 53 #define BMC050_A_OUT_TEMP 0x08
kenjiArai 0:8de5e2fd5c48 54 #define BMC050_A_STATUS_REG0 0x09
kenjiArai 0:8de5e2fd5c48 55 #define BMC050_A_STATUS_REG1 0x0a
kenjiArai 0:8de5e2fd5c48 56 #define BMC050_A_STATUS_REG2 0x0b
kenjiArai 0:8de5e2fd5c48 57 #define BMC050_A_STATUS_REG3 0x0c
kenjiArai 0:8de5e2fd5c48 58 // reserved
kenjiArai 0:8de5e2fd5c48 59 // reserved
kenjiArai 0:8de5e2fd5c48 60 #define BMC050_A_G_RANGE 0x0f
kenjiArai 0:8de5e2fd5c48 61 #define BMC050_A_BANDWIDTH 0x10
kenjiArai 0:8de5e2fd5c48 62 #define BMC050_A_POWER_MODE 0x11
kenjiArai 0:8de5e2fd5c48 63 // reserved
kenjiArai 0:8de5e2fd5c48 64 #define BMC050_A_FILTER 0x13
kenjiArai 0:8de5e2fd5c48 65 #define BMC050_A_SW_RESET 0x14
kenjiArai 0:8de5e2fd5c48 66 // not implement yet 0x15 to 0x35
kenjiArai 0:8de5e2fd5c48 67 #define BMC050_A_OFST_COMP0 0x36
kenjiArai 0:8de5e2fd5c48 68 #define BMC050_A_OFST_COMP1 0x37
kenjiArai 0:8de5e2fd5c48 69 #define BMC050_A_OFST_COMP_DX 0x38
kenjiArai 0:8de5e2fd5c48 70 #define BMC050_A_OFST_COMP_DY 0x39
kenjiArai 0:8de5e2fd5c48 71 #define BMC050_A_OFST_COMP_DZ 0x3a
kenjiArai 0:8de5e2fd5c48 72 #define BMC050_A_OFST_COMP_DX_UF 0x3b
kenjiArai 0:8de5e2fd5c48 73 #define BMC050_A_OFST_COMP_DY_UF 0x3c
kenjiArai 0:8de5e2fd5c48 74 #define BMC050_A_OFST_COMP_DZ_UF 0x3d
kenjiArai 0:8de5e2fd5c48 75
kenjiArai 0:8de5e2fd5c48 76 // magnetometer
kenjiArai 0:8de5e2fd5c48 77 #define BMC050_M_WHO_AM_I 0x40
kenjiArai 0:8de5e2fd5c48 78 // reserved
kenjiArai 0:8de5e2fd5c48 79 #define BMC050_M_OUT_X_L 0x42
kenjiArai 0:8de5e2fd5c48 80 #define BMC050_M_OUT_X_H 0x43
kenjiArai 0:8de5e2fd5c48 81 #define BMC050_M_OUT_Y_L 0x44
kenjiArai 0:8de5e2fd5c48 82 #define BMC050_M_OUT_Y_H 0x45
kenjiArai 0:8de5e2fd5c48 83 #define BMC050_M_OUT_Z_L 0x46
kenjiArai 0:8de5e2fd5c48 84 #define BMC050_M_OUT_Z_H 0x47
kenjiArai 0:8de5e2fd5c48 85 #define BMC050_M_HALL_L 0x48
kenjiArai 0:8de5e2fd5c48 86 #define BMC050_M_HALL_H 0x49
kenjiArai 0:8de5e2fd5c48 87 #define BMC050_M_INTERRUPT 0x4a
kenjiArai 0:8de5e2fd5c48 88 #define BMC050_M_POWER_MODE 0x4b
kenjiArai 0:8de5e2fd5c48 89 #define BMC050_M_OPERATION 0x4c
kenjiArai 0:8de5e2fd5c48 90 // not implement yet 0x4d to 0x50
kenjiArai 0:8de5e2fd5c48 91 #define BMC050_M_REPETITION_XY 0x51
kenjiArai 0:8de5e2fd5c48 92 #define BMC050_M_REPETITION_Z 0x51
kenjiArai 0:8de5e2fd5c48 93
kenjiArai 0:8de5e2fd5c48 94 ////////////// CONTROL DEFINITION /////////////////////////////////////////////
kenjiArai 0:8de5e2fd5c48 95 // Full Scale
kenjiArai 0:8de5e2fd5c48 96 #define BMC050_FS_2G 0x03
kenjiArai 0:8de5e2fd5c48 97 #define BMC050_FS_4G 0x05
kenjiArai 0:8de5e2fd5c48 98 #define BMC050_FS_8G 0x08
kenjiArai 0:8de5e2fd5c48 99 #define BMC050_FS_16G 0x0c
kenjiArai 0:8de5e2fd5c48 100 // Bandwidth (Low pass)
kenjiArai 0:8de5e2fd5c48 101 #define BMC050_NOT_FILTERED 0x00
kenjiArai 0:8de5e2fd5c48 102 #define BMC050_BW_7R81 0x08
kenjiArai 0:8de5e2fd5c48 103 #define BMC050_BW_15R63 0x09
kenjiArai 0:8de5e2fd5c48 104 #define BMC050_BW_31R25 0x0a
kenjiArai 0:8de5e2fd5c48 105 #define BMC050_BW_62R5 0x0b
kenjiArai 0:8de5e2fd5c48 106 #define BMC050_BW_125 0x0c
kenjiArai 0:8de5e2fd5c48 107 #define BMC050_BW_250 0x0d
kenjiArai 0:8de5e2fd5c48 108 #define BMC050_BW_500 0x0e
kenjiArai 0:8de5e2fd5c48 109 #define BMC050_BW_1000 0x0f
kenjiArai 0:8de5e2fd5c48 110
kenjiArai 0:8de5e2fd5c48 111 // Output Data Rate (ODR)
kenjiArai 0:8de5e2fd5c48 112 #define BMC050_DR_10 0
kenjiArai 0:8de5e2fd5c48 113 #define BMC050_DR_2 1
kenjiArai 0:8de5e2fd5c48 114 #define BMC050_DR_6 2
kenjiArai 0:8de5e2fd5c48 115 #define BMC050_DR_8 3
kenjiArai 0:8de5e2fd5c48 116 #define BMC050_DR_15 4
kenjiArai 0:8de5e2fd5c48 117 #define BMC050_DR_20 5
kenjiArai 0:8de5e2fd5c48 118 #define BMC050_DR_25 6
kenjiArai 0:8de5e2fd5c48 119 #define BMC050_DR_30 7
kenjiArai 0:8de5e2fd5c48 120
kenjiArai 0:8de5e2fd5c48 121 // definition for Nomalization
kenjiArai 0:8de5e2fd5c48 122 #define GRAVITY (9.80665F)
kenjiArai 0:8de5e2fd5c48 123 #define BMC050_GAIN (3.91F)
kenjiArai 0:8de5e2fd5c48 124
kenjiArai 0:8de5e2fd5c48 125 ////////////// DATA TYPE DEFINITION ///////////////////////////////////////////
kenjiArai 0:8de5e2fd5c48 126 typedef struct {
kenjiArai 0:8de5e2fd5c48 127 uint8_t addr;
kenjiArai 0:8de5e2fd5c48 128 uint8_t g_range;
kenjiArai 0:8de5e2fd5c48 129 uint8_t bandwith;
kenjiArai 0:8de5e2fd5c48 130 uint8_t filter;
kenjiArai 0:8de5e2fd5c48 131 } BMC050ACC_TypeDef;
kenjiArai 0:8de5e2fd5c48 132
kenjiArai 0:8de5e2fd5c48 133 typedef struct {
kenjiArai 0:8de5e2fd5c48 134 uint8_t addr;
kenjiArai 0:8de5e2fd5c48 135 uint8_t data_rate;
kenjiArai 0:8de5e2fd5c48 136 } BMC050MAG_TypeDef;
kenjiArai 0:8de5e2fd5c48 137
kenjiArai 0:8de5e2fd5c48 138 /** Interface for Bosch Sensortec COMPASS 6 AXIS
kenjiArai 0:8de5e2fd5c48 139 * Chip: BMC050, two chips configuration (Accelerometer 3axis & Magnetometer 3axis)
kenjiArai 0:8de5e2fd5c48 140 *
kenjiArai 0:8de5e2fd5c48 141 * @code
kenjiArai 0:8de5e2fd5c48 142 * #include "mbed.h"
kenjiArai 0:8de5e2fd5c48 143 *
kenjiArai 0:8de5e2fd5c48 144 * const BMC050ACC_TypeDef acc_parameter = {
kenjiArai 0:8de5e2fd5c48 145 * BMC050_A_G_CHIP_ADDR, // I2C Address
kenjiArai 0:8de5e2fd5c48 146 * BMC050_FS_2G, // G-range slection
kenjiArai 0:8de5e2fd5c48 147 * BMC050_BW_250, // Bandwidth
kenjiArai 0:8de5e2fd5c48 148 * };
kenjiArai 0:8de5e2fd5c48 149 *
kenjiArai 0:8de5e2fd5c48 150 * const BMC050MAG_TypeDef mag_parameter = {
kenjiArai 0:8de5e2fd5c48 151 * BMC050_M_GG_CHIP_ADDR,// I2C Address
kenjiArai 0:8de5e2fd5c48 152 * BMC050_DR_10 // Data Rate
kenjiArai 0:8de5e2fd5c48 153 * };
kenjiArai 0:8de5e2fd5c48 154 *
kenjiArai 0:8de5e2fd5c48 155 * // I2C Communication
kenjiArai 0:8de5e2fd5c48 156 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:8de5e2fd5c48 157 * BMC050 bmc050(i2c, &acc_parameter, &mag_parameter);
kenjiArai 0:8de5e2fd5c48 158 *
kenjiArai 0:8de5e2fd5c48 159 * int main() {
kenjiArai 0:8de5e2fd5c48 160 * float fa[3];
kenjiArai 0:8de5e2fd5c48 161 * float fg[3];
kenjiArai 0:8de5e2fd5c48 162 *
kenjiArai 0:8de5e2fd5c48 163 * if (bmc050.read_id_acc() == BMC050_A_G_CHIP_ADDR){
kenjiArai 0:8de5e2fd5c48 164 * bmc050.read_data_acc(fa);
kenjiArai 0:8de5e2fd5c48 165 * }
kenjiArai 0:8de5e2fd5c48 166 * if (bmc050.read_id_mag() == BMC050_M_GG_CHIP_ADDR){
kenjiArai 0:8de5e2fd5c48 167 * bmc050.read_data_mag(fg);
kenjiArai 0:8de5e2fd5c48 168 * }
kenjiArai 0:8de5e2fd5c48 169 * }
kenjiArai 0:8de5e2fd5c48 170 * @endcode
kenjiArai 0:8de5e2fd5c48 171 */
kenjiArai 0:8de5e2fd5c48 172
kenjiArai 0:8de5e2fd5c48 173 class BMC050{
kenjiArai 0:8de5e2fd5c48 174 public:
kenjiArai 0:8de5e2fd5c48 175 /** Configure data pin
kenjiArai 0:8de5e2fd5c48 176 * @param data SDA and SCL pins
kenjiArai 0:8de5e2fd5c48 177 * @param parameter address for acc (BMC050ACC_TypeDef)
kenjiArai 0:8de5e2fd5c48 178 * @param parameter address for mag (BMC050MAG_TypeDef)
kenjiArai 0:8de5e2fd5c48 179 */
kenjiArai 0:8de5e2fd5c48 180 BMC050(PinName p_sda, PinName p_scl,
kenjiArai 0:8de5e2fd5c48 181 const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 182
kenjiArai 0:8de5e2fd5c48 183 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:8de5e2fd5c48 184 * @param I2C previous definition
kenjiArai 0:8de5e2fd5c48 185 * @param other parameters -> please see BMC050(PinName p_sda, PinName p_scl,...)
kenjiArai 0:8de5e2fd5c48 186 */
kenjiArai 0:8de5e2fd5c48 187 BMC050(I2C& p_i2c,
kenjiArai 0:8de5e2fd5c48 188 const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 189
kenjiArai 0:8de5e2fd5c48 190 /** Read a float type data from accelerometer
kenjiArai 0:8de5e2fd5c48 191 * @param float type of three arry's address, e.g. float dt[3];
kenjiArai 0:8de5e2fd5c48 192 * @return acc motion data unit: m/s/s
kenjiArai 0:8de5e2fd5c48 193 * @return dt[0]->x, dt[1]->y, dt[2]->z
kenjiArai 0:8de5e2fd5c48 194 */
kenjiArai 0:8de5e2fd5c48 195 void read_data_acc(float *dt);
kenjiArai 0:8de5e2fd5c48 196
kenjiArai 0:8de5e2fd5c48 197 /** Read a float type data from magnetometer
kenjiArai 0:8de5e2fd5c48 198 * @param float type of three arry's address, e.g. float dt[3];
kenjiArai 0:8de5e2fd5c48 199 * @return magnettic field data unit: uT(micro T)
kenjiArai 0:8de5e2fd5c48 200 * @return dt[0]->x, dt[1]->y, dt[2]->z
kenjiArai 0:8de5e2fd5c48 201 */
kenjiArai 0:8de5e2fd5c48 202 void read_data_mag(float *dt);
kenjiArai 0:8de5e2fd5c48 203
kenjiArai 0:8de5e2fd5c48 204 /** Read temperature data
kenjiArai 0:8de5e2fd5c48 205 * @param none
kenjiArai 0:8de5e2fd5c48 206 * @return temperature unit: deg.C
kenjiArai 0:8de5e2fd5c48 207 */
kenjiArai 0:8de5e2fd5c48 208 float read_temp();
kenjiArai 0:8de5e2fd5c48 209
kenjiArai 0:8de5e2fd5c48 210 /** Read a acc chip ID number
kenjiArai 0:8de5e2fd5c48 211 * @param none
kenjiArai 0:8de5e2fd5c48 212 * @return should be I_AM_BMC050_ACC(0x03)
kenjiArai 0:8de5e2fd5c48 213 */
kenjiArai 0:8de5e2fd5c48 214 uint8_t read_id_acc();
kenjiArai 0:8de5e2fd5c48 215
kenjiArai 0:8de5e2fd5c48 216 /** Read a mag chip ID number
kenjiArai 0:8de5e2fd5c48 217 * @param none
kenjiArai 0:8de5e2fd5c48 218 * @return should be I_AM_BMC050_MAG(0x32)
kenjiArai 0:8de5e2fd5c48 219 */
kenjiArai 0:8de5e2fd5c48 220 uint8_t read_id_mag();
kenjiArai 0:8de5e2fd5c48 221
kenjiArai 0:8de5e2fd5c48 222 /** Read Data Ready flag /Acc
kenjiArai 0:8de5e2fd5c48 223 * @param none
kenjiArai 0:8de5e2fd5c48 224 * @return 1 = Ready
kenjiArai 0:8de5e2fd5c48 225 */
kenjiArai 0:8de5e2fd5c48 226 uint8_t data_ready_acc();
kenjiArai 0:8de5e2fd5c48 227
kenjiArai 0:8de5e2fd5c48 228 /** Read Data Ready flag /Mag
kenjiArai 0:8de5e2fd5c48 229 * @param none
kenjiArai 0:8de5e2fd5c48 230 * @return 1 = Ready
kenjiArai 0:8de5e2fd5c48 231 */
kenjiArai 0:8de5e2fd5c48 232 uint8_t data_ready_mag();
kenjiArai 0:8de5e2fd5c48 233
kenjiArai 0:8de5e2fd5c48 234 /** Read register (general purpose)
kenjiArai 0:8de5e2fd5c48 235 * @param register's address
kenjiArai 0:8de5e2fd5c48 236 * @return register data
kenjiArai 0:8de5e2fd5c48 237 */
kenjiArai 0:8de5e2fd5c48 238 uint8_t read_reg_acc(uint8_t addr);
kenjiArai 0:8de5e2fd5c48 239 uint8_t read_reg_mag(uint8_t addr);
kenjiArai 0:8de5e2fd5c48 240
kenjiArai 0:8de5e2fd5c48 241 /** Write register (general purpose)
kenjiArai 0:8de5e2fd5c48 242 * @param register's address
kenjiArai 0:8de5e2fd5c48 243 * @param data
kenjiArai 0:8de5e2fd5c48 244 * @return none
kenjiArai 0:8de5e2fd5c48 245 */
kenjiArai 0:8de5e2fd5c48 246 void write_reg_acc(uint8_t addr, uint8_t data);
kenjiArai 0:8de5e2fd5c48 247 void write_reg_mag(uint8_t addr, uint8_t data);
kenjiArai 0:8de5e2fd5c48 248
kenjiArai 0:8de5e2fd5c48 249 protected:
kenjiArai 0:8de5e2fd5c48 250 void initialize(const BMC050ACC_TypeDef *acc_parameter,
kenjiArai 0:8de5e2fd5c48 251 const BMC050MAG_TypeDef *mag_parameter);
kenjiArai 0:8de5e2fd5c48 252 void i2c_read_n_bytes(int, char*, int);
kenjiArai 0:8de5e2fd5c48 253 void i2c_write_n_bytes(int, char*, int);
kenjiArai 0:8de5e2fd5c48 254
kenjiArai 0:8de5e2fd5c48 255 I2C i2c;
kenjiArai 0:8de5e2fd5c48 256
kenjiArai 0:8de5e2fd5c48 257 private:
kenjiArai 0:8de5e2fd5c48 258 float fs_factor_acc;// full scale factor
kenjiArai 0:8de5e2fd5c48 259 char dbf[2]; // working buffer
kenjiArai 0:8de5e2fd5c48 260 uint8_t acc_addr; // acc sensor address
kenjiArai 0:8de5e2fd5c48 261 uint8_t acc_id; // acc ID
kenjiArai 0:8de5e2fd5c48 262 uint8_t acc_ready; // acc is on I2C line = 1, not = 0
kenjiArai 0:8de5e2fd5c48 263 uint8_t mag_addr; // mag sensor address
kenjiArai 0:8de5e2fd5c48 264 uint8_t mag_id; // mag ID
kenjiArai 0:8de5e2fd5c48 265 uint8_t mag_ready; // mag is on I2C line = 1, not = 0
kenjiArai 0:8de5e2fd5c48 266 };
kenjiArai 0:8de5e2fd5c48 267
kenjiArai 0:8de5e2fd5c48 268 #endif // BMC050_H