BNO055をI2CとUARTで使用するためのライブラリ。UARTはmbedにて不安定なため使用できるボードとできないボードがある模様。
Dependents: BNO055_BME280_ Yabusame2_gyro GRhanawaizman test_deg_read
BNO055.h
00001 #ifndef BNO055_H 00002 #define BNO055_H 00003 00004 #include "mbed.h" 00005 00006 //UART通信に使用するバッファの最大サイズ 00007 #define BNO055_UART_BUF_MAXLEN 24 //[byte] 00008 //I2Cデフォルトスレーブアドレス 00009 #define BNO055_I2C_DEFADDR 0x28 00010 00011 #define BNO055_PAGE_ID 0x07 00012 00013 #define BNO055P0_CHIP_ID 0x00 00014 #define BNO055P0_ACC_ID 0x01 00015 #define BNO055P0_MAG_ID 0x02 00016 #define BNO055P0_GYR_ID 0x03 00017 #define BNO055P0_SW_REV_ID_LSB 0x04 00018 #define BNO055P0_SW_REV_ID_MSB 0x05 00019 #define BNO055P0_BL_REV_ID 0x06 00020 #define BNO055P0_ACC_DATA_X_LSB 0x08 00021 #define BNO055P0_ACC_DATA_X_MSB 0x09 00022 #define BNO055P0_ACC_DATA_Y_LSB 0x0A 00023 #define BNO055P0_ACC_DATA_Y_MSB 0x0B 00024 #define BNO055P0_ACC_DATA_Z_LSB 0x0C 00025 #define BNO055P0_ACC_DATA_Z_MSB 0x0D 00026 #define BNO055P0_MAG_DATA_X_LSB 0x0E 00027 #define BNO055P0_MAG_DATA_X_MSB 0x0F 00028 #define BNO055P0_MAG_DATA_Y_LSB 0x10 00029 #define BNO055P0_MAG_DATA_Y_MSB 0x11 00030 #define BNO055P0_MAG_DATA_Z_LSB 0x12 00031 #define BNO055P0_MAG_DATA_Z_MSB 0x13 00032 #define BNO055P0_GYR_DATA_X_LSB 0x14 00033 #define BNO055P0_GYR_DATA_X_MSB 0x15 00034 #define BNO055P0_GYR_DATA_Y_LSB 0x16 00035 #define BNO055P0_GYR_DATA_Y_MSB 0x17 00036 #define BNO055P0_GYR_DATA_Z_LSB 0x18 00037 #define BNO055P0_GYR_DATA_Z_MSB 0x19 00038 #define BNO055P0_EUL_HEADING_LSB 0x1A 00039 #define BNO055P0_EUL_HEADING_MSB 0x1B 00040 #define BNO055P0_EUL_ROLL_LSB 0x1C 00041 #define BNO055P0_EUL_ROLL_MSB 0x1D 00042 #define BNO055P0_EUL_PITCH_LSB 0x1E 00043 #define BNO055P0_EUL_PITCH_MSB 0x1F 00044 #define BNO055P0_QUA_DATA_W_LSB 0x20 00045 #define BNO055P0_QUA_DATA_W_MSB 0x21 00046 #define BNO055P0_QUA_DATA_X_LSB 0x22 00047 #define BNO055P0_QUA_DATA_X_MSB 0x23 00048 #define BNO055P0_QUA_DATA_Y_LSB 0x24 00049 #define BNO055P0_QUA_DATA_Y_MSB 0x25 00050 #define BNO055P0_QUA_DATA_Z_LSB 0x26 00051 #define BNO055P0_QUA_DATA_Z_MSB 0x27 00052 #define BNO055P0_LIA_DATA_X_LSB 0x28 00053 #define BNO055P0_LIA_DATA_X_MBS 0x29 00054 #define BNO055P0_LIA_DATA_Y_LSB 0x2A 00055 #define BNO055P0_LIA_DATA_Y_MBS 0x2B 00056 #define BNO055P0_LIA_DATA_Z_LSB 0x2C 00057 #define BNO055P0_LIA_DATA_Z_MBS 0x2D 00058 #define BNO055P0_GRV_DATA_X_LSB 0x2E 00059 #define BNO055P0_GRV_DATA_X_MSB 0x2F 00060 #define BNO055P0_GRV_DATA_Y_LSB 0x30 00061 #define BNO055P0_GRV_DATA_Y_MSB 0x31 00062 #define BNO055P0_GRV_DATA_Z_LSB 0x32 00063 #define BNO055P0_GRV_DATA_Z_MSB 0x33 00064 #define BNO055P0_TEMP 0x34 00065 #define BNO055P0_CALIB_STAT 0x35 00066 #define BNO055P0_ST_RESULT 0x36 00067 #define BNO055P0_INT_STA 0x37 00068 #define BNO055P0_SYS_CLK_STATUS 0x38 00069 #define BNO055P0_SYS_STATUS 0x39 00070 #define BNO055P0_SYS_ERR 0x3A 00071 #define BNO055P0_UNIT_SEL 0x3B 00072 #define BNO055P0_OPR_MODE 0x3D 00073 #define BNO055P0_PWR_MODE 0x3E 00074 #define BNO055P0_SYS_TRIGGER 0x3F 00075 #define BNO055P0_TEMP_SOURCE 0x40 00076 #define BNO055P0_AXIS_MAP_CONFIG 0x41 00077 #define BNO055P0_AXIS_MAP_SIGN 0x42 00078 #define BNO055P0_ACC_OFFSET_X_LSB 0x55 00079 #define BNO055P0_ACC_OFFSET_X_MSB 0x56 00080 #define BNO055P0_ACC_OFFSET_Y_LSB 0x57 00081 #define BNO055P0_ACC_OFFSET_Y_MSB 0x58 00082 #define BNO055P0_ACC_OFFSET_Z_LSB 0x59 00083 #define BNO055P0_ACC_OFFSET_Z_MSB 0x5A 00084 #define BNO055P0_MAG_OFFSET_X_LSB 0x5B 00085 #define BNO055P0_MAG_OFFSET_X_MSB 0x5C 00086 #define BNO055P0_MAG_OFFSET_Y_LSB 0x5D 00087 #define BNO055P0_MAG_OFFSET_Y_MSB 0x5E 00088 #define BNO055P0_MAG_OFFSET_Z_LSB 0x5F 00089 #define BNO055P0_MAG_OFFSET_Z_MSB 0x60 00090 #define BNO055P0_GYR_OFFSET_X_LSB 0x61 00091 #define BNO055P0_GYR_OFFSET_X_MSB 0x62 00092 #define BNO055P0_GYR_OFFSET_Y_LSB 0x63 00093 #define BNO055P0_GYR_OFFSET_Y_MSB 0x64 00094 #define BNO055P0_GYR_OFFSET_Z_LSB 0x65 00095 #define BNO055P0_GYR_OFFSET_Z_MSB 0x66 00096 #define BNO055P0_ACC_RADIUS_LSB 0x67 00097 #define BNO055P0_ACC_RADIUS_MSB 0x68 00098 #define BNO055P0_MAG_RADIUS_LSB 0x69 00099 #define BNO055P0_MAG_RADIUS_MSB 0x6A 00100 00101 #define BNO055P1_ACC_CONFIG 0x08 00102 #define BNO055P1_MAG_CONFIG 0x09 00103 #define BNO055P1_GYR_CONFIG_0 0x0A 00104 #define BNO055P1_GYR_CONFIG_1 0x0B 00105 #define BNO055P1_ACC_SLEEP_CONFIG 0x0C 00106 #define BNO055P1_GYR_SLEEP_CONFIG 0x0D 00107 #define BNO055P1_INT_MSK 0x0F 00108 #define BNO055P1_INT_EN 0x10 00109 #define BNO055P1_ACC_AM_THRES 0x11 00110 #define BNO055P1_ACC_INT_SETTINGS 0x12 00111 #define BNO055P1_ACC_HG_DURATION 0x13 00112 #define BNO055P1_ACC_HG_THRES 0x14 00113 #define BNO055P1_ACC_NM_THRES 0x15 00114 #define BNO055P1_ACC_NM_SET 0x16 00115 #define BNO055P1_GYR_INT_SETING 0x17 00116 #define BNO055P1_GYR_HR_X_SET 0x18 00117 #define BNO055P1_GYR_DUR_X 0x19 00118 #define BNO055P1_GYR_HR_Y_SET 0x1A 00119 #define BNO055P1_GYR_DUR_Y 0x1B 00120 #define BNO055P1_GYR_HR_Z_SET 0x1C 00121 #define BNO055P1_GYR_DUR_Z 0x1D 00122 #define BNO055P1_GYR_AM_THRES 0x1E 00123 #define BNO055P1_GYR_AM_SET 0x1F 00124 00125 00126 class BNO055_CTRL{ 00127 public: 00128 BNO055_CTRL(); 00129 virtual ~BNO055_CTRL(); 00130 protected: 00131 bool page1; 00132 char *ary; 00133 char lastError; 00134 char lastLength; 00135 public: 00136 char getNowPage(); 00137 char getLastError(); 00138 char getLastLength(); 00139 virtual void init(); 00140 virtual char rr(bool isPage1, char regAddr); 00141 virtual char rrc(bool isPage1, char startRegAddr, unsigned char *receiveBytes, char length); 00142 virtual char wr(bool isPage1, char regAddr, char wBytes); 00143 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length); 00144 }; 00145 00146 class BNO055_UART_CTRL : public BNO055_CTRL{ 00147 public: 00148 BNO055_UART_CTRL(RawSerial *uart); 00149 virtual ~BNO055_UART_CTRL(); 00150 private: 00151 RawSerial *iface; 00152 short rxd; 00153 bool read_mark; 00154 00155 void rxInterrupt(); 00156 public: 00157 virtual void init(); 00158 virtual char rr(bool isPage1, char regAddr); 00159 virtual char rrc(bool isPage1, char startRegAddr, unsigned char *receiveBytes, char length); 00160 virtual char wr(bool isPage1, char regAddr, char wBytes); 00161 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length); 00162 }; 00163 00164 class BNO055_I2C_CTRL : public BNO055_CTRL{ 00165 public: 00166 BNO055_I2C_CTRL(I2C *iic, char addr, unsigned int freq); 00167 virtual ~BNO055_I2C_CTRL(); 00168 private: 00169 I2C *iface; 00170 char i2c_writeAddr; 00171 char i2c_readAddr; 00172 unsigned int i2c_freq; 00173 public: 00174 virtual void init(); 00175 virtual char rr(bool isPage1, char regAddr); 00176 virtual char rrc(bool isPage1, char startRegAddr, unsigned char *receiveBytes, char length); 00177 virtual char wr(bool isPage1, char regAddr, char wBytes); 00178 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length); 00179 }; 00180 00181 class BOARDC_BNO055{ 00182 public: 00183 BOARDC_BNO055(PinName tx, PinName rx); 00184 BOARDC_BNO055(RawSerial *uart); 00185 BOARDC_BNO055(PinName scl, PinName sda, char addr=BNO055_I2C_DEFADDR, unsigned int freq=100000); 00186 BOARDC_BNO055(I2C *iic, char addr=BNO055_I2C_DEFADDR, unsigned int freq=100000); 00187 ~BOARDC_BNO055(); 00188 00189 private: 00190 BNO055_CTRL *ctrl; 00191 float scaleACC; 00192 float scaleMAG; //fixed 00193 float scaleGYRO; 00194 float scaleTEMP; 00195 float scaleEuler; 00196 float scaleLIA; //=scaleACC 00197 float scaleGV; //=scaleACC 00198 double scaleQuaternion; //fixed 00199 unsigned char axisRemap; 00200 unsigned char axisSign; 00201 bool clkExt; 00202 00203 public: 00204 char initialize(bool resetIface=true); 00205 char getIfaceLastError(); 00206 char getIfaceLastLength(); 00207 00208 char customRead(bool isPage1, char regAddr); 00209 char customReadC(bool isPage1, char startRegAddr, unsigned char *receiveBytes, unsigned char length); 00210 char customWrite(bool isPage1, char regAddr, char wBytes); 00211 char customWriteC(bool isPage1, char startRegAddr, char *Bytes, unsigned char length); 00212 00213 char getPage(); 00214 void setPage(unsigned char pageNo); 00215 00216 char getChipID(); 00217 char getAccChipID(); 00218 char getMagChipID(); 00219 char getGyroChipID(); 00220 00221 short getRevision(); 00222 char getBootRevision(); 00223 00224 float getAccScale(); 00225 float getMagScale(); 00226 float getGyroScale(); 00227 float getTempScale(); 00228 float getEulerScale(); 00229 float getLinearScale(); 00230 float getGVScale(); 00231 double getQuaternionScale(); 00232 00233 void getAccDataAll(short &accX, short &accY, short &accZ); 00234 short getAccDataX(); 00235 short getAccDataY(); 00236 short getAccDataZ(); 00237 00238 void getMagDataAll(short &magX, short &magY, short &magZ); 00239 short getMagDataX(); 00240 short getMagDataY(); 00241 short getMagDataZ(); 00242 00243 void getGyroDataAll(short &gyroX, short &gyroY, short &gyroZ); 00244 short getGyroDataX(); 00245 short getGyroDataY(); 00246 short getGyroDataZ(); 00247 00248 void getEulerDataAll(short &E_heading, short &E_roll, short &E_pitch); 00249 short getEulerDataHeading(); 00250 short getEulerDataYaw(); 00251 short getEulerDataRoll(); 00252 short getEulerDataPitch(); 00253 00254 void get9Axis(short *box); 00255 void get9AxisAndEUL(short *box); 00256 00257 void getQuaternion(short &q1, short &q2, short &q3, short &q4); 00258 void getEulerFromQ(double &E_heading, double &E_roll, double &E_pitch); 00259 00260 void getLinearAccDataAll(short &L_accX, short &L_accY, short &L_accZ); 00261 short getLinearAccDataX(); 00262 short getLinearAccDataY(); 00263 short getLinearAccDataZ(); 00264 00265 void getGVectorDataAll(short &gvX, short &gvY, short &gvZ); 00266 short getGVectorDataX(); 00267 short getGVectorDataY(); 00268 short getGVectorDataZ(); 00269 00270 char getTemperature(); 00271 00272 void getCalibStatusAll(char &sys, char &acc, char &mag, char &gyro); 00273 char getCalibStatusSys(); 00274 char getCalibStatusAcc(); 00275 char getCalibStatusMag(); 00276 char getCalibStatusGyro(); 00277 00278 char getSelfTestResultAll(); 00279 bool getSelfTestResultMCU(); 00280 bool getSelfTestResultAcc(); 00281 bool getSelfTestResultMag(); 00282 bool getSelfTestResultGyro(); 00283 00284 char triggeredIntALL(); 00285 bool triggeredACC_NM(); 00286 bool triggeredACC_AM(); 00287 bool triggeredACC_HIGH_G(); 00288 bool triggeredGYR_HIGH_RATE(); 00289 bool triggeredGYRO_AM(); 00290 00291 bool isSystemClockFixed(); 00292 00293 char getSystemStatus(); 00294 char getSystemError(); 00295 00296 char getUNIT_SEL(); 00297 char setUNIT_SEL(char selectValue); 00298 char setUNIT_AccUnit(bool isMeterPerSec2=true); 00299 char setUNIT_GyroUnit(bool isDps=true); 00300 char setUNIT_EulerUnit(bool isDegrees=true); 00301 char setUNIT_Temperature(bool isCelsius=true); 00302 char setUNIT_OrientationMode(bool ori_Android=true); 00303 00304 char getOperationMode(); 00305 char setOperationMode(char modeValue); 00306 char setOperation_CONFIG(); 00307 char setOperation_ACCONRY(); 00308 char setOperation_MAGONRY(); 00309 char setOperation_GYROONRY(); 00310 char setOperation_ACCMAG(); 00311 char setOperation_ACCGYRO(); 00312 char setOperation_MAGGYRO(); 00313 char setOperation_AMG(); 00314 char setOperation_Fusion_IMU(); 00315 char setOperation_Fusion_COMPASS(); 00316 char setOperation_Fusion_M4G(); 00317 char setOperation_Fusion_NDOF_FMC_OFF(); 00318 char setOperation_Fusion_NDOF(); 00319 00320 char getPowerMode(); 00321 char setPowerMode(unsigned char modeValue); 00322 char setPowerMode_Normal(); 00323 char setPowerMode_LowPower(); 00324 char setPowerMode_Suspend(); 00325 00326 char setSysTrigger(char regVal); 00327 char setSys_ExternalCrystal(bool isExternal=true); 00328 char resetInterrupt(); 00329 char soft_reset(); 00330 char execSelfTest(); 00331 00332 char getTempSource(); 00333 char setTempSource(bool Accelerometer=true); 00334 00335 char getAxisMapConfig(); 00336 char setAxisMapConfig(char val); 00337 char getAxisMapSign(); 00338 char setAxisMapSign(char val); 00339 char setAxisRemap_topview_topleft(); 00340 char setAxisRemap_topview_topright(); 00341 char setAxisRemap_topview_bottomleft(); 00342 char setAxisRemap_topview_bottomright(); 00343 char setAxisRemap_bottomview_topleft(); 00344 char setAxisRemap_bottomview_topright(); 00345 char setAxisRemap_bottomview_bottomleft(); 00346 char setAxisRemap_bottomview_bottomright(); 00347 char getAxisRemap_type(); 00348 00349 void getAccOffsetAll(float &offsetX, float &offsetY, float &offsetZ); 00350 float getAccOffsetX(); 00351 float getAccOffsetY(); 00352 float getAccOffsetZ(); 00353 char setAccOffsetAll(float offsetX, float offsetY, float offsetZ); 00354 char setAccOffsetX(float offset); 00355 char setAccOffsetY(float offset); 00356 char setAccOffsetZ(float offset); 00357 00358 void getMagOffsetAll(float &offsetX, float &offsetY, float &offsetZ); 00359 float getMagOffsetX(); 00360 float getMagOffsetY(); 00361 float getMagOffsetZ(); 00362 char setMagOffsetAll(float offsetX, float offsetY, float offsetZ); 00363 char setMagOffsetX(float offset); 00364 char setMagOffsetY(float offset); 00365 char setMagOffsetZ(float offset); 00366 00367 void getGyroOffsetAll(float &offsetX, float &offsetY, float &offsetZ); 00368 float getGyroOffsetX(); 00369 float getGyroOffsetY(); 00370 float getGyroOffsetZ(); 00371 char setGyroOffsetAll(float offsetX, float offsetY, float offsetZ); 00372 char setGyroOffsetX(float offset); 00373 char setGyroOffsetY(float offset); 00374 char setGyroOffsetZ(float offset); 00375 00376 short getAccRadius(); 00377 char setAccRadius(short LSB); 00378 00379 short getMagRadius(); 00380 char setMagRadius(short LSB); 00381 00382 char getAccConfig(); 00383 char setAccConfig(char regVal); 00384 char setAccConfig(char gRange, char bandWidth, char powMode); 00385 char setAccRange(unsigned char G); 00386 00387 char getMagConfig(); 00388 char setMagConfig(char regVal); 00389 char setMagConfig(char rate, char oprMode, char powMode); 00390 00391 char getGyroConfig_0(); 00392 char setGyroConfig_0(char regVal); 00393 char setGyroConfig_0(char range, char bandWidth); 00394 char getGyroConfig_1(); 00395 char setGyroConfig_1(char powMode); 00396 char setGyroRange(unsigned short dps); 00397 00398 char getAccSleepConfig(); 00399 char setAccSleepConfig(char regVal); 00400 char setAccSleepConfig(char duration, char mode); 00401 00402 char getGyroSleepConfig(); 00403 char setGyroSleepConfig(char regVal); 00404 char setGyroSleepConfig(char autoSleepDuration, char duration); 00405 00406 char getInterruptMask(); 00407 char setInterruptMask(char mask); 00408 00409 char getInterruptEnable(); 00410 char setInterruptEnable(char mask); 00411 00412 float getAccAnyMotionThreashold(bool ismg=true); 00413 char setAccAnyMotionThreashold(bool ismg, float threashold); 00414 00415 char getAccInterruptSettings(); 00416 char setAccInterruptSettings(char settings); 00417 00418 unsigned short getAccHighGduration(); 00419 char setAccHighGduration(short ms); 00420 00421 float getAccHighGThreashold(bool ismg=true); 00422 char setAccHighGThreashold(bool ismg, float threashold); 00423 00424 float getAccNMThreashold(bool ismg=true); 00425 char setAccNMThreashold(bool ismg, float threashold); 00426 00427 char getAccNMsetting(); 00428 char setAccNMsetting(char setting); 00429 00430 char getGyroInterruptSettings(); 00431 char setGyroInterruptSettings(char settings); 00432 00433 char getGyroHighRateXsetting(); 00434 void getGyroHighRateXsetting_dps(float &hyst, float &thres); 00435 char setGyroHighRateXsetting(char setting); 00436 char setGyroHighRateXsetting_dps(float hystVal, float thresVal); 00437 float getGyroHighRateXduration(); 00438 char setGyroHighRateXduration(float duration); 00439 00440 char getGyroHighRateYsetting(); 00441 void getGyroHighRateYsetting_dps(float &hyst, float &thres); 00442 char setGyroHighRateYsetting(char setting); 00443 char setGyroHighRateYsetting_dps(float hystVal, float thresVal); 00444 float getGyroHighRateYduration(); 00445 char setGyroHighRateYduration(float duration); 00446 00447 char getGyroHighRateZsetting(); 00448 void getGyroHighRateZsetting_dps(float &hyst, float &thres); 00449 char setGyroHighRateZsetting(char setting); 00450 char setGyroHighRateZsetting_dps(float hystVal, float thresVal); 00451 float getGyroHighRateZduration(); 00452 char setGyroHighRateZduration(float duration); 00453 00454 float getGyroAnyMotionThreashold(); 00455 char setGyroAnyMotionThreashold(float threashold); 00456 00457 char getAccAnyMotionSetting(); 00458 char setAccAnyMotionSetting(char setting); 00459 }; 00460 00461 #endif
Generated on Tue Jul 12 2022 21:30:19 by 1.7.2