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
BMC050.h@3:24aa4d5fa7de, 2017-08-23 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 23 09:22:29 2017 +0000
- Revision:
- 3:24aa4d5fa7de
- Parent:
- 2:93141eb80862
countermeasure for NonCopyable
Who changed what in which revision?
User | Revision | Line number | New 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 | 3:24aa4d5fa7de | 6 | * Copyright (c) 2014,'16,'17 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 | 3:24aa4d5fa7de | 9 | * Created: July 19th, 2014 |
kenjiArai | 3:24aa4d5fa7de | 10 | * Revised: August 23rd, 2017 |
kenjiArai | 0:8de5e2fd5c48 | 11 | */ |
kenjiArai | 0:8de5e2fd5c48 | 12 | |
kenjiArai | 0:8de5e2fd5c48 | 13 | #ifndef BMC050_H |
kenjiArai | 0:8de5e2fd5c48 | 14 | #define BMC050_H |
kenjiArai | 0:8de5e2fd5c48 | 15 | |
kenjiArai | 0:8de5e2fd5c48 | 16 | #include "mbed.h" |
kenjiArai | 0:8de5e2fd5c48 | 17 | |
kenjiArai | 1:b022f8d7884d | 18 | ////////////// ADDRESS DEFINITION /////////////// |
kenjiArai | 0:8de5e2fd5c48 | 19 | // BMC050 Address/accelerometer |
kenjiArai | 0:8de5e2fd5c48 | 20 | // 7bit address = 0b001100x(0x18 or 0x19 depends on SDO) |
kenjiArai | 0:8de5e2fd5c48 | 21 | // -> 8bit = 0b001100x0(0x30,0x32) -> 0x31,0x33(Read) or 0x30,0x32(Write) |
kenjiArai | 0:8de5e2fd5c48 | 22 | #define BMC050_A_G_CHIP_ADDR 0x30 // SDO pin = Ground |
kenjiArai | 0:8de5e2fd5c48 | 23 | #define BMC050_A_V_CHIP_ADDR 0x32 // SDO pin = Vdd |
kenjiArai | 0:8de5e2fd5c48 | 24 | // BMC050 Address/magnetometer |
kenjiArai | 0:8de5e2fd5c48 | 25 | // 7bit address = 0b001000x(0x10,0x11,0x12 or 0x13 depends on SDO and CSB2) |
kenjiArai | 0:8de5e2fd5c48 | 26 | // -> 8bit = 0b00100xx0(0x20,0x22,0x24,0x26) |
kenjiArai | 0:8de5e2fd5c48 | 27 | #define BMC050_M_GG_CHIP_ADDR 0x20 // CSB2 pin = Ground, SDO pin = Ground |
kenjiArai | 0:8de5e2fd5c48 | 28 | #define BMC050_M_GV_CHIP_ADDR 0x22 // CSB2 pin = Ground, SDO pin = Vdd |
kenjiArai | 0:8de5e2fd5c48 | 29 | #define BMC050_M_VG_CHIP_ADDR 0x24 // CSB2 pin = Vdd, SDO pin = Ground |
kenjiArai | 0:8de5e2fd5c48 | 30 | #define BMC050_M_VV_CHIP_ADDR 0x26 // CSB2 pin = Vdd, SDO pin = Vdd |
kenjiArai | 1:b022f8d7884d | 31 | #define BMC050_MAG_NOT_USED_ADDR 0xff // If you only used acc and keep mag as suspend |
kenjiArai | 0:8de5e2fd5c48 | 32 | |
kenjiArai | 0:8de5e2fd5c48 | 33 | // BMC050 ACC ID |
kenjiArai | 0:8de5e2fd5c48 | 34 | #define I_AM_BMC050_ACC 0x03 |
kenjiArai | 0:8de5e2fd5c48 | 35 | // BMC050 ACC ID |
kenjiArai | 0:8de5e2fd5c48 | 36 | #define I_AM_BMC050_MAG 0x32 |
kenjiArai | 0:8de5e2fd5c48 | 37 | |
kenjiArai | 1:b022f8d7884d | 38 | ////////////// REGISTER DEFINITION ////////////// |
kenjiArai | 0:8de5e2fd5c48 | 39 | // accelerometer |
kenjiArai | 0:8de5e2fd5c48 | 40 | #define BMC050_A_WHO_AM_I 0x00 |
kenjiArai | 0:8de5e2fd5c48 | 41 | // reserved |
kenjiArai | 0:8de5e2fd5c48 | 42 | #define BMC050_A_OUT_X_L 0x02 |
kenjiArai | 0:8de5e2fd5c48 | 43 | #define BMC050_A_OUT_X_H 0x03 |
kenjiArai | 0:8de5e2fd5c48 | 44 | #define BMC050_A_OUT_Y_L 0x04 |
kenjiArai | 0:8de5e2fd5c48 | 45 | #define BMC050_A_OUT_Y_H 0x05 |
kenjiArai | 0:8de5e2fd5c48 | 46 | #define BMC050_A_OUT_Z_L 0x06 |
kenjiArai | 0:8de5e2fd5c48 | 47 | #define BMC050_A_OUT_Z_H 0x07 |
kenjiArai | 0:8de5e2fd5c48 | 48 | #define BMC050_A_OUT_TEMP 0x08 |
kenjiArai | 0:8de5e2fd5c48 | 49 | #define BMC050_A_STATUS_REG0 0x09 |
kenjiArai | 0:8de5e2fd5c48 | 50 | #define BMC050_A_STATUS_REG1 0x0a |
kenjiArai | 0:8de5e2fd5c48 | 51 | #define BMC050_A_STATUS_REG2 0x0b |
kenjiArai | 0:8de5e2fd5c48 | 52 | #define BMC050_A_STATUS_REG3 0x0c |
kenjiArai | 0:8de5e2fd5c48 | 53 | // reserved |
kenjiArai | 0:8de5e2fd5c48 | 54 | // reserved |
kenjiArai | 0:8de5e2fd5c48 | 55 | #define BMC050_A_G_RANGE 0x0f |
kenjiArai | 0:8de5e2fd5c48 | 56 | #define BMC050_A_BANDWIDTH 0x10 |
kenjiArai | 0:8de5e2fd5c48 | 57 | #define BMC050_A_POWER_MODE 0x11 |
kenjiArai | 0:8de5e2fd5c48 | 58 | // reserved |
kenjiArai | 0:8de5e2fd5c48 | 59 | #define BMC050_A_FILTER 0x13 |
kenjiArai | 0:8de5e2fd5c48 | 60 | #define BMC050_A_SW_RESET 0x14 |
kenjiArai | 0:8de5e2fd5c48 | 61 | // not implement yet 0x15 to 0x35 |
kenjiArai | 0:8de5e2fd5c48 | 62 | #define BMC050_A_OFST_COMP0 0x36 |
kenjiArai | 0:8de5e2fd5c48 | 63 | #define BMC050_A_OFST_COMP1 0x37 |
kenjiArai | 0:8de5e2fd5c48 | 64 | #define BMC050_A_OFST_COMP_DX 0x38 |
kenjiArai | 0:8de5e2fd5c48 | 65 | #define BMC050_A_OFST_COMP_DY 0x39 |
kenjiArai | 0:8de5e2fd5c48 | 66 | #define BMC050_A_OFST_COMP_DZ 0x3a |
kenjiArai | 0:8de5e2fd5c48 | 67 | #define BMC050_A_OFST_COMP_DX_UF 0x3b |
kenjiArai | 0:8de5e2fd5c48 | 68 | #define BMC050_A_OFST_COMP_DY_UF 0x3c |
kenjiArai | 0:8de5e2fd5c48 | 69 | #define BMC050_A_OFST_COMP_DZ_UF 0x3d |
kenjiArai | 0:8de5e2fd5c48 | 70 | |
kenjiArai | 0:8de5e2fd5c48 | 71 | // magnetometer |
kenjiArai | 0:8de5e2fd5c48 | 72 | #define BMC050_M_WHO_AM_I 0x40 |
kenjiArai | 0:8de5e2fd5c48 | 73 | // reserved |
kenjiArai | 0:8de5e2fd5c48 | 74 | #define BMC050_M_OUT_X_L 0x42 |
kenjiArai | 0:8de5e2fd5c48 | 75 | #define BMC050_M_OUT_X_H 0x43 |
kenjiArai | 0:8de5e2fd5c48 | 76 | #define BMC050_M_OUT_Y_L 0x44 |
kenjiArai | 0:8de5e2fd5c48 | 77 | #define BMC050_M_OUT_Y_H 0x45 |
kenjiArai | 0:8de5e2fd5c48 | 78 | #define BMC050_M_OUT_Z_L 0x46 |
kenjiArai | 0:8de5e2fd5c48 | 79 | #define BMC050_M_OUT_Z_H 0x47 |
kenjiArai | 0:8de5e2fd5c48 | 80 | #define BMC050_M_HALL_L 0x48 |
kenjiArai | 0:8de5e2fd5c48 | 81 | #define BMC050_M_HALL_H 0x49 |
kenjiArai | 0:8de5e2fd5c48 | 82 | #define BMC050_M_INTERRUPT 0x4a |
kenjiArai | 0:8de5e2fd5c48 | 83 | #define BMC050_M_POWER_MODE 0x4b |
kenjiArai | 0:8de5e2fd5c48 | 84 | #define BMC050_M_OPERATION 0x4c |
kenjiArai | 0:8de5e2fd5c48 | 85 | // not implement yet 0x4d to 0x50 |
kenjiArai | 0:8de5e2fd5c48 | 86 | #define BMC050_M_REPETITION_XY 0x51 |
kenjiArai | 0:8de5e2fd5c48 | 87 | #define BMC050_M_REPETITION_Z 0x51 |
kenjiArai | 0:8de5e2fd5c48 | 88 | |
kenjiArai | 1:b022f8d7884d | 89 | ////////////// CONTROL DEFINITION /////////////// |
kenjiArai | 0:8de5e2fd5c48 | 90 | // Full Scale |
kenjiArai | 0:8de5e2fd5c48 | 91 | #define BMC050_FS_2G 0x03 |
kenjiArai | 0:8de5e2fd5c48 | 92 | #define BMC050_FS_4G 0x05 |
kenjiArai | 0:8de5e2fd5c48 | 93 | #define BMC050_FS_8G 0x08 |
kenjiArai | 0:8de5e2fd5c48 | 94 | #define BMC050_FS_16G 0x0c |
kenjiArai | 0:8de5e2fd5c48 | 95 | // Bandwidth (Low pass) |
kenjiArai | 0:8de5e2fd5c48 | 96 | #define BMC050_NOT_FILTERED 0x00 |
kenjiArai | 0:8de5e2fd5c48 | 97 | #define BMC050_BW_7R81 0x08 |
kenjiArai | 0:8de5e2fd5c48 | 98 | #define BMC050_BW_15R63 0x09 |
kenjiArai | 0:8de5e2fd5c48 | 99 | #define BMC050_BW_31R25 0x0a |
kenjiArai | 0:8de5e2fd5c48 | 100 | #define BMC050_BW_62R5 0x0b |
kenjiArai | 0:8de5e2fd5c48 | 101 | #define BMC050_BW_125 0x0c |
kenjiArai | 0:8de5e2fd5c48 | 102 | #define BMC050_BW_250 0x0d |
kenjiArai | 0:8de5e2fd5c48 | 103 | #define BMC050_BW_500 0x0e |
kenjiArai | 0:8de5e2fd5c48 | 104 | #define BMC050_BW_1000 0x0f |
kenjiArai | 0:8de5e2fd5c48 | 105 | |
kenjiArai | 0:8de5e2fd5c48 | 106 | // Output Data Rate (ODR) |
kenjiArai | 0:8de5e2fd5c48 | 107 | #define BMC050_DR_10 0 |
kenjiArai | 0:8de5e2fd5c48 | 108 | #define BMC050_DR_2 1 |
kenjiArai | 0:8de5e2fd5c48 | 109 | #define BMC050_DR_6 2 |
kenjiArai | 0:8de5e2fd5c48 | 110 | #define BMC050_DR_8 3 |
kenjiArai | 0:8de5e2fd5c48 | 111 | #define BMC050_DR_15 4 |
kenjiArai | 0:8de5e2fd5c48 | 112 | #define BMC050_DR_20 5 |
kenjiArai | 0:8de5e2fd5c48 | 113 | #define BMC050_DR_25 6 |
kenjiArai | 0:8de5e2fd5c48 | 114 | #define BMC050_DR_30 7 |
kenjiArai | 0:8de5e2fd5c48 | 115 | |
kenjiArai | 0:8de5e2fd5c48 | 116 | // definition for Nomalization |
kenjiArai | 2:93141eb80862 | 117 | //Gravity at Earth's surface in m/s/s |
kenjiArai | 0:8de5e2fd5c48 | 118 | #define GRAVITY (9.80665F) |
kenjiArai | 0:8de5e2fd5c48 | 119 | #define BMC050_GAIN (3.91F) |
kenjiArai | 1:b022f8d7884d | 120 | #define BMC050_DUMMY 0 |
kenjiArai | 0:8de5e2fd5c48 | 121 | |
kenjiArai | 1:b022f8d7884d | 122 | ////////////// DATA TYPE DEFINITION ///////////// |
kenjiArai | 0:8de5e2fd5c48 | 123 | typedef struct { |
kenjiArai | 0:8de5e2fd5c48 | 124 | uint8_t addr; |
kenjiArai | 0:8de5e2fd5c48 | 125 | uint8_t g_range; |
kenjiArai | 0:8de5e2fd5c48 | 126 | uint8_t bandwith; |
kenjiArai | 0:8de5e2fd5c48 | 127 | uint8_t filter; |
kenjiArai | 0:8de5e2fd5c48 | 128 | } BMC050ACC_TypeDef; |
kenjiArai | 0:8de5e2fd5c48 | 129 | |
kenjiArai | 0:8de5e2fd5c48 | 130 | typedef struct { |
kenjiArai | 0:8de5e2fd5c48 | 131 | uint8_t addr; |
kenjiArai | 0:8de5e2fd5c48 | 132 | uint8_t data_rate; |
kenjiArai | 0:8de5e2fd5c48 | 133 | } BMC050MAG_TypeDef; |
kenjiArai | 0:8de5e2fd5c48 | 134 | |
kenjiArai | 0:8de5e2fd5c48 | 135 | /** Interface for Bosch Sensortec COMPASS 6 AXIS |
kenjiArai | 0:8de5e2fd5c48 | 136 | * Chip: BMC050, two chips configuration (Accelerometer 3axis & Magnetometer 3axis) |
kenjiArai | 0:8de5e2fd5c48 | 137 | * |
kenjiArai | 0:8de5e2fd5c48 | 138 | * @code |
kenjiArai | 0:8de5e2fd5c48 | 139 | * #include "mbed.h" |
kenjiArai | 0:8de5e2fd5c48 | 140 | * |
kenjiArai | 0:8de5e2fd5c48 | 141 | * const BMC050ACC_TypeDef acc_parameter = { |
kenjiArai | 0:8de5e2fd5c48 | 142 | * BMC050_A_G_CHIP_ADDR, // I2C Address |
kenjiArai | 0:8de5e2fd5c48 | 143 | * BMC050_FS_2G, // G-range slection |
kenjiArai | 0:8de5e2fd5c48 | 144 | * BMC050_BW_250, // Bandwidth |
kenjiArai | 0:8de5e2fd5c48 | 145 | * }; |
kenjiArai | 1:b022f8d7884d | 146 | * |
kenjiArai | 1:b022f8d7884d | 147 | * #if 1 |
kenjiArai | 0:8de5e2fd5c48 | 148 | * const BMC050MAG_TypeDef mag_parameter = { |
kenjiArai | 0:8de5e2fd5c48 | 149 | * BMC050_M_GG_CHIP_ADDR,// I2C Address |
kenjiArai | 0:8de5e2fd5c48 | 150 | * BMC050_DR_10 // Data Rate |
kenjiArai | 0:8de5e2fd5c48 | 151 | * }; |
kenjiArai | 1:b022f8d7884d | 152 | * #else // If you would like to keep "Suspend mode" for mag |
kenjiArai | 1:b022f8d7884d | 153 | * const BMC050MAG_TypeDef mag_parameter = { |
kenjiArai | 1:b022f8d7884d | 154 | * BMC050_MAG_NOT_USED_ADDR,// Not use mag sensor |
kenjiArai | 1:b022f8d7884d | 155 | * BMC050_DUMMY // dummy |
kenjiArai | 1:b022f8d7884d | 156 | * }; |
kenjiArai | 1:b022f8d7884d | 157 | * #endif |
kenjiArai | 0:8de5e2fd5c48 | 158 | * |
kenjiArai | 0:8de5e2fd5c48 | 159 | * // I2C Communication |
kenjiArai | 0:8de5e2fd5c48 | 160 | * I2C i2c(dp5,dp27); // SDA, SCL |
kenjiArai | 0:8de5e2fd5c48 | 161 | * BMC050 bmc050(i2c, &acc_parameter, &mag_parameter); |
kenjiArai | 0:8de5e2fd5c48 | 162 | * |
kenjiArai | 0:8de5e2fd5c48 | 163 | * int main() { |
kenjiArai | 0:8de5e2fd5c48 | 164 | * float fa[3]; |
kenjiArai | 0:8de5e2fd5c48 | 165 | * float fg[3]; |
kenjiArai | 0:8de5e2fd5c48 | 166 | * |
kenjiArai | 2:93141eb80862 | 167 | * if (bmc050.read_id_acc() == I_AM_BMC050_ACC){ |
kenjiArai | 0:8de5e2fd5c48 | 168 | * bmc050.read_data_acc(fa); |
kenjiArai | 0:8de5e2fd5c48 | 169 | * } |
kenjiArai | 2:93141eb80862 | 170 | * if (bmc050.read_id_mag() == I_AM_BMC050_MAG){ |
kenjiArai | 0:8de5e2fd5c48 | 171 | * bmc050.read_data_mag(fg); |
kenjiArai | 0:8de5e2fd5c48 | 172 | * } |
kenjiArai | 0:8de5e2fd5c48 | 173 | * } |
kenjiArai | 0:8de5e2fd5c48 | 174 | * @endcode |
kenjiArai | 0:8de5e2fd5c48 | 175 | */ |
kenjiArai | 0:8de5e2fd5c48 | 176 | |
kenjiArai | 0:8de5e2fd5c48 | 177 | class BMC050{ |
kenjiArai | 0:8de5e2fd5c48 | 178 | public: |
kenjiArai | 0:8de5e2fd5c48 | 179 | /** Configure data pin |
kenjiArai | 0:8de5e2fd5c48 | 180 | * @param data SDA and SCL pins |
kenjiArai | 0:8de5e2fd5c48 | 181 | * @param parameter address for acc (BMC050ACC_TypeDef) |
kenjiArai | 0:8de5e2fd5c48 | 182 | * @param parameter address for mag (BMC050MAG_TypeDef) |
kenjiArai | 0:8de5e2fd5c48 | 183 | */ |
kenjiArai | 0:8de5e2fd5c48 | 184 | BMC050(PinName p_sda, PinName p_scl, |
kenjiArai | 0:8de5e2fd5c48 | 185 | const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter); |
kenjiArai | 0:8de5e2fd5c48 | 186 | |
kenjiArai | 0:8de5e2fd5c48 | 187 | /** Configure data pin (with other devices on I2C line) |
kenjiArai | 0:8de5e2fd5c48 | 188 | * @param I2C previous definition |
kenjiArai | 0:8de5e2fd5c48 | 189 | * @param other parameters -> please see BMC050(PinName p_sda, PinName p_scl,...) |
kenjiArai | 0:8de5e2fd5c48 | 190 | */ |
kenjiArai | 0:8de5e2fd5c48 | 191 | BMC050(I2C& p_i2c, |
kenjiArai | 0:8de5e2fd5c48 | 192 | const BMC050ACC_TypeDef *acc_parameter, const BMC050MAG_TypeDef *mag_parameter); |
kenjiArai | 0:8de5e2fd5c48 | 193 | |
kenjiArai | 0:8de5e2fd5c48 | 194 | /** Read a float type data from accelerometer |
kenjiArai | 0:8de5e2fd5c48 | 195 | * @param float type of three arry's address, e.g. float dt[3]; |
kenjiArai | 0:8de5e2fd5c48 | 196 | * @return acc motion data unit: m/s/s |
kenjiArai | 0:8de5e2fd5c48 | 197 | * @return dt[0]->x, dt[1]->y, dt[2]->z |
kenjiArai | 0:8de5e2fd5c48 | 198 | */ |
kenjiArai | 0:8de5e2fd5c48 | 199 | void read_data_acc(float *dt); |
kenjiArai | 0:8de5e2fd5c48 | 200 | |
kenjiArai | 1:b022f8d7884d | 201 | /** Read a float type data from accelerometer |
kenjiArai | 1:b022f8d7884d | 202 | * @param float type of three arry's address, e.g. float dt[3]; |
kenjiArai | 1:b022f8d7884d | 203 | * @return acc motion data unit: mg |
kenjiArai | 1:b022f8d7884d | 204 | * @return dt[0]->x, dt[1]->y, dt[2]->z |
kenjiArai | 1:b022f8d7884d | 205 | */ |
kenjiArai | 1:b022f8d7884d | 206 | void read_mg_acc(float *dt); |
kenjiArai | 1:b022f8d7884d | 207 | |
kenjiArai | 0:8de5e2fd5c48 | 208 | /** Read a float type data from magnetometer |
kenjiArai | 0:8de5e2fd5c48 | 209 | * @param float type of three arry's address, e.g. float dt[3]; |
kenjiArai | 0:8de5e2fd5c48 | 210 | * @return magnettic field data unit: uT(micro T) |
kenjiArai | 0:8de5e2fd5c48 | 211 | * @return dt[0]->x, dt[1]->y, dt[2]->z |
kenjiArai | 0:8de5e2fd5c48 | 212 | */ |
kenjiArai | 0:8de5e2fd5c48 | 213 | void read_data_mag(float *dt); |
kenjiArai | 0:8de5e2fd5c48 | 214 | |
kenjiArai | 0:8de5e2fd5c48 | 215 | /** Read temperature data |
kenjiArai | 0:8de5e2fd5c48 | 216 | * @param none |
kenjiArai | 0:8de5e2fd5c48 | 217 | * @return temperature unit: deg.C |
kenjiArai | 0:8de5e2fd5c48 | 218 | */ |
kenjiArai | 0:8de5e2fd5c48 | 219 | float read_temp(); |
kenjiArai | 0:8de5e2fd5c48 | 220 | |
kenjiArai | 0:8de5e2fd5c48 | 221 | /** Read a acc chip ID number |
kenjiArai | 0:8de5e2fd5c48 | 222 | * @param none |
kenjiArai | 0:8de5e2fd5c48 | 223 | * @return should be I_AM_BMC050_ACC(0x03) |
kenjiArai | 0:8de5e2fd5c48 | 224 | */ |
kenjiArai | 0:8de5e2fd5c48 | 225 | uint8_t read_id_acc(); |
kenjiArai | 0:8de5e2fd5c48 | 226 | |
kenjiArai | 0:8de5e2fd5c48 | 227 | /** Read a mag chip ID number |
kenjiArai | 0:8de5e2fd5c48 | 228 | * @param none |
kenjiArai | 0:8de5e2fd5c48 | 229 | * @return should be I_AM_BMC050_MAG(0x32) |
kenjiArai | 0:8de5e2fd5c48 | 230 | */ |
kenjiArai | 0:8de5e2fd5c48 | 231 | uint8_t read_id_mag(); |
kenjiArai | 0:8de5e2fd5c48 | 232 | |
kenjiArai | 0:8de5e2fd5c48 | 233 | /** Read Data Ready flag /Acc |
kenjiArai | 0:8de5e2fd5c48 | 234 | * @param none |
kenjiArai | 0:8de5e2fd5c48 | 235 | * @return 1 = Ready |
kenjiArai | 0:8de5e2fd5c48 | 236 | */ |
kenjiArai | 0:8de5e2fd5c48 | 237 | uint8_t data_ready_acc(); |
kenjiArai | 0:8de5e2fd5c48 | 238 | |
kenjiArai | 0:8de5e2fd5c48 | 239 | /** Read Data Ready flag /Mag |
kenjiArai | 0:8de5e2fd5c48 | 240 | * @param none |
kenjiArai | 0:8de5e2fd5c48 | 241 | * @return 1 = Ready |
kenjiArai | 0:8de5e2fd5c48 | 242 | */ |
kenjiArai | 0:8de5e2fd5c48 | 243 | uint8_t data_ready_mag(); |
kenjiArai | 0:8de5e2fd5c48 | 244 | |
kenjiArai | 0:8de5e2fd5c48 | 245 | /** Read register (general purpose) |
kenjiArai | 0:8de5e2fd5c48 | 246 | * @param register's address |
kenjiArai | 0:8de5e2fd5c48 | 247 | * @return register data |
kenjiArai | 0:8de5e2fd5c48 | 248 | */ |
kenjiArai | 0:8de5e2fd5c48 | 249 | uint8_t read_reg_acc(uint8_t addr); |
kenjiArai | 1:b022f8d7884d | 250 | |
kenjiArai | 1:b022f8d7884d | 251 | /** Read register (general purpose) |
kenjiArai | 1:b022f8d7884d | 252 | * @param register's address |
kenjiArai | 1:b022f8d7884d | 253 | * @return register data |
kenjiArai | 1:b022f8d7884d | 254 | */ |
kenjiArai | 0:8de5e2fd5c48 | 255 | uint8_t read_reg_mag(uint8_t addr); |
kenjiArai | 0:8de5e2fd5c48 | 256 | |
kenjiArai | 1:b022f8d7884d | 257 | /** Set I2C clock frequency |
kenjiArai | 1:b022f8d7884d | 258 | * @param freq. |
kenjiArai | 1:b022f8d7884d | 259 | * @return none |
kenjiArai | 1:b022f8d7884d | 260 | */ |
kenjiArai | 1:b022f8d7884d | 261 | void frequency(int hz); |
kenjiArai | 1:b022f8d7884d | 262 | |
kenjiArai | 0:8de5e2fd5c48 | 263 | /** Write register (general purpose) |
kenjiArai | 0:8de5e2fd5c48 | 264 | * @param register's address |
kenjiArai | 0:8de5e2fd5c48 | 265 | * @param data |
kenjiArai | 0:8de5e2fd5c48 | 266 | * @return none |
kenjiArai | 0:8de5e2fd5c48 | 267 | */ |
kenjiArai | 0:8de5e2fd5c48 | 268 | void write_reg_acc(uint8_t addr, uint8_t data); |
kenjiArai | 1:b022f8d7884d | 269 | |
kenjiArai | 1:b022f8d7884d | 270 | /** Write register (general purpose) |
kenjiArai | 1:b022f8d7884d | 271 | * @param register's address |
kenjiArai | 1:b022f8d7884d | 272 | * @param data |
kenjiArai | 1:b022f8d7884d | 273 | * @return none |
kenjiArai | 1:b022f8d7884d | 274 | */ |
kenjiArai | 0:8de5e2fd5c48 | 275 | void write_reg_mag(uint8_t addr, uint8_t data); |
kenjiArai | 0:8de5e2fd5c48 | 276 | |
kenjiArai | 0:8de5e2fd5c48 | 277 | protected: |
kenjiArai | 0:8de5e2fd5c48 | 278 | void initialize(const BMC050ACC_TypeDef *acc_parameter, |
kenjiArai | 0:8de5e2fd5c48 | 279 | const BMC050MAG_TypeDef *mag_parameter); |
kenjiArai | 0:8de5e2fd5c48 | 280 | |
kenjiArai | 3:24aa4d5fa7de | 281 | I2C *_i2c_p; |
kenjiArai | 3:24aa4d5fa7de | 282 | I2C &_i2c; |
kenjiArai | 0:8de5e2fd5c48 | 283 | |
kenjiArai | 0:8de5e2fd5c48 | 284 | private: |
kenjiArai | 2:93141eb80862 | 285 | float fs_factor_acc; // full scale factor |
kenjiArai | 2:93141eb80862 | 286 | char dbf[2]; // working buffer |
kenjiArai | 0:8de5e2fd5c48 | 287 | uint8_t acc_addr; // acc sensor address |
kenjiArai | 0:8de5e2fd5c48 | 288 | uint8_t acc_id; // acc ID |
kenjiArai | 0:8de5e2fd5c48 | 289 | uint8_t acc_ready; // acc is on I2C line = 1, not = 0 |
kenjiArai | 0:8de5e2fd5c48 | 290 | uint8_t mag_addr; // mag sensor address |
kenjiArai | 0:8de5e2fd5c48 | 291 | uint8_t mag_id; // mag ID |
kenjiArai | 0:8de5e2fd5c48 | 292 | uint8_t mag_ready; // mag is on I2C line = 1, not = 0 |
kenjiArai | 0:8de5e2fd5c48 | 293 | }; |
kenjiArai | 0:8de5e2fd5c48 | 294 | |
kenjiArai | 0:8de5e2fd5c48 | 295 | #endif // BMC050_H |
kenjiArai | 3:24aa4d5fa7de | 296 |