Kobayashi Takumi / BNO055_mbed
Committer:
YutaTogashi
Date:
Wed Feb 13 14:56:26 2019 +0000
Revision:
0:4092428e9e15
BNO055;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YutaTogashi 0:4092428e9e15 1 #ifndef BNO055_H
YutaTogashi 0:4092428e9e15 2 #define BNO055_H
YutaTogashi 0:4092428e9e15 3
YutaTogashi 0:4092428e9e15 4 //UART通信に使用するバッファの最大サイズ
YutaTogashi 0:4092428e9e15 5 #define BNO055_UART_BUF_MAXLEN 24 //[byte]
YutaTogashi 0:4092428e9e15 6 //I2Cデフォルトスレーブアドレス
YutaTogashi 0:4092428e9e15 7 #define BNO055_I2C_DEFADDR 0x28
YutaTogashi 0:4092428e9e15 8
YutaTogashi 0:4092428e9e15 9 #define BNO055_PAGE_ID 0x07
YutaTogashi 0:4092428e9e15 10
YutaTogashi 0:4092428e9e15 11 #define BNO055P0_CHIP_ID 0x00
YutaTogashi 0:4092428e9e15 12 #define BNO055P0_ACC_ID 0x01
YutaTogashi 0:4092428e9e15 13 #define BNO055P0_MAG_ID 0x02
YutaTogashi 0:4092428e9e15 14 #define BNO055P0_GYR_ID 0x03
YutaTogashi 0:4092428e9e15 15 #define BNO055P0_SW_REV_ID_LSB 0x04
YutaTogashi 0:4092428e9e15 16 #define BNO055P0_SW_REV_ID_MSB 0x05
YutaTogashi 0:4092428e9e15 17 #define BNO055P0_BL_REV_ID 0x06
YutaTogashi 0:4092428e9e15 18 #define BNO055P0_ACC_DATA_X_LSB 0x08
YutaTogashi 0:4092428e9e15 19 #define BNO055P0_ACC_DATA_X_MSB 0x09
YutaTogashi 0:4092428e9e15 20 #define BNO055P0_ACC_DATA_Y_LSB 0x0A
YutaTogashi 0:4092428e9e15 21 #define BNO055P0_ACC_DATA_Y_MSB 0x0B
YutaTogashi 0:4092428e9e15 22 #define BNO055P0_ACC_DATA_Z_LSB 0x0C
YutaTogashi 0:4092428e9e15 23 #define BNO055P0_ACC_DATA_Z_MSB 0x0D
YutaTogashi 0:4092428e9e15 24 #define BNO055P0_MAG_DATA_X_LSB 0x0E
YutaTogashi 0:4092428e9e15 25 #define BNO055P0_MAG_DATA_X_MSB 0x0F
YutaTogashi 0:4092428e9e15 26 #define BNO055P0_MAG_DATA_Y_LSB 0x10
YutaTogashi 0:4092428e9e15 27 #define BNO055P0_MAG_DATA_Y_MSB 0x11
YutaTogashi 0:4092428e9e15 28 #define BNO055P0_MAG_DATA_Z_LSB 0x12
YutaTogashi 0:4092428e9e15 29 #define BNO055P0_MAG_DATA_Z_MSB 0x13
YutaTogashi 0:4092428e9e15 30 #define BNO055P0_GYR_DATA_X_LSB 0x14
YutaTogashi 0:4092428e9e15 31 #define BNO055P0_GYR_DATA_X_MSB 0x15
YutaTogashi 0:4092428e9e15 32 #define BNO055P0_GYR_DATA_Y_LSB 0x16
YutaTogashi 0:4092428e9e15 33 #define BNO055P0_GYR_DATA_Y_MSB 0x17
YutaTogashi 0:4092428e9e15 34 #define BNO055P0_GYR_DATA_Z_LSB 0x18
YutaTogashi 0:4092428e9e15 35 #define BNO055P0_GYR_DATA_Z_MSB 0x19
YutaTogashi 0:4092428e9e15 36 #define BNO055P0_EUL_HEADING_LSB 0x1A
YutaTogashi 0:4092428e9e15 37 #define BNO055P0_EUL_HEADING_MSB 0x1B
YutaTogashi 0:4092428e9e15 38 #define BNO055P0_EUL_ROLL_LSB 0x1C
YutaTogashi 0:4092428e9e15 39 #define BNO055P0_EUL_ROLL_MSB 0x1D
YutaTogashi 0:4092428e9e15 40 #define BNO055P0_EUL_PITCH_LSB 0x1E
YutaTogashi 0:4092428e9e15 41 #define BNO055P0_EUL_PITCH_MSB 0x1F
YutaTogashi 0:4092428e9e15 42 #define BNO055P0_QUA_DATA_W_LSB 0x20
YutaTogashi 0:4092428e9e15 43 #define BNO055P0_QUA_DATA_W_MSB 0x21
YutaTogashi 0:4092428e9e15 44 #define BNO055P0_QUA_DATA_X_LSB 0x22
YutaTogashi 0:4092428e9e15 45 #define BNO055P0_QUA_DATA_X_MSB 0x23
YutaTogashi 0:4092428e9e15 46 #define BNO055P0_QUA_DATA_Y_LSB 0x24
YutaTogashi 0:4092428e9e15 47 #define BNO055P0_QUA_DATA_Y_MSB 0x25
YutaTogashi 0:4092428e9e15 48 #define BNO055P0_QUA_DATA_Z_LSB 0x26
YutaTogashi 0:4092428e9e15 49 #define BNO055P0_QUA_DATA_Z_MSB 0x27
YutaTogashi 0:4092428e9e15 50 #define BNO055P0_LIA_DATA_X_LSB 0x28
YutaTogashi 0:4092428e9e15 51 #define BNO055P0_LIA_DATA_X_MBS 0x29
YutaTogashi 0:4092428e9e15 52 #define BNO055P0_LIA_DATA_Y_LSB 0x2A
YutaTogashi 0:4092428e9e15 53 #define BNO055P0_LIA_DATA_Y_MBS 0x2B
YutaTogashi 0:4092428e9e15 54 #define BNO055P0_LIA_DATA_Z_LSB 0x2C
YutaTogashi 0:4092428e9e15 55 #define BNO055P0_LIA_DATA_Z_MBS 0x2D
YutaTogashi 0:4092428e9e15 56 #define BNO055P0_GRV_DATA_X_LSB 0x2E
YutaTogashi 0:4092428e9e15 57 #define BNO055P0_GRV_DATA_X_MSB 0x2F
YutaTogashi 0:4092428e9e15 58 #define BNO055P0_GRV_DATA_Y_LSB 0x30
YutaTogashi 0:4092428e9e15 59 #define BNO055P0_GRV_DATA_Y_MSB 0x31
YutaTogashi 0:4092428e9e15 60 #define BNO055P0_GRV_DATA_Z_LSB 0x32
YutaTogashi 0:4092428e9e15 61 #define BNO055P0_GRV_DATA_Z_MSB 0x33
YutaTogashi 0:4092428e9e15 62 #define BNO055P0_TEMP 0x34
YutaTogashi 0:4092428e9e15 63 #define BNO055P0_CALIB_STAT 0x35
YutaTogashi 0:4092428e9e15 64 #define BNO055P0_ST_RESULT 0x36
YutaTogashi 0:4092428e9e15 65 #define BNO055P0_INT_STA 0x37
YutaTogashi 0:4092428e9e15 66 #define BNO055P0_SYS_CLK_STATUS 0x38
YutaTogashi 0:4092428e9e15 67 #define BNO055P0_SYS_STATUS 0x39
YutaTogashi 0:4092428e9e15 68 #define BNO055P0_SYS_ERR 0x3A
YutaTogashi 0:4092428e9e15 69 #define BNO055P0_UNIT_SEL 0x3B
YutaTogashi 0:4092428e9e15 70 #define BNO055P0_OPR_MODE 0x3D
YutaTogashi 0:4092428e9e15 71 #define BNO055P0_PWR_MODE 0x3E
YutaTogashi 0:4092428e9e15 72 #define BNO055P0_SYS_TRIGGER 0x3F
YutaTogashi 0:4092428e9e15 73 #define BNO055P0_TEMP_SOURCE 0x40
YutaTogashi 0:4092428e9e15 74 #define BNO055P0_AXIS_MAP_CONFIG 0x41
YutaTogashi 0:4092428e9e15 75 #define BNO055P0_AXIS_MAP_SIGN 0x42
YutaTogashi 0:4092428e9e15 76 #define BNO055P0_ACC_OFFSET_X_LSB 0x55
YutaTogashi 0:4092428e9e15 77 #define BNO055P0_ACC_OFFSET_X_MSB 0x56
YutaTogashi 0:4092428e9e15 78 #define BNO055P0_ACC_OFFSET_Y_LSB 0x57
YutaTogashi 0:4092428e9e15 79 #define BNO055P0_ACC_OFFSET_Y_MSB 0x58
YutaTogashi 0:4092428e9e15 80 #define BNO055P0_ACC_OFFSET_Z_LSB 0x59
YutaTogashi 0:4092428e9e15 81 #define BNO055P0_ACC_OFFSET_Z_MSB 0x5A
YutaTogashi 0:4092428e9e15 82 #define BNO055P0_MAG_OFFSET_X_LSB 0x5B
YutaTogashi 0:4092428e9e15 83 #define BNO055P0_MAG_OFFSET_X_MSB 0x5C
YutaTogashi 0:4092428e9e15 84 #define BNO055P0_MAG_OFFSET_Y_LSB 0x5D
YutaTogashi 0:4092428e9e15 85 #define BNO055P0_MAG_OFFSET_Y_MSB 0x5E
YutaTogashi 0:4092428e9e15 86 #define BNO055P0_MAG_OFFSET_Z_LSB 0x5F
YutaTogashi 0:4092428e9e15 87 #define BNO055P0_MAG_OFFSET_Z_MSB 0x60
YutaTogashi 0:4092428e9e15 88 #define BNO055P0_GYR_OFFSET_X_LSB 0x61
YutaTogashi 0:4092428e9e15 89 #define BNO055P0_GYR_OFFSET_X_MSB 0x62
YutaTogashi 0:4092428e9e15 90 #define BNO055P0_GYR_OFFSET_Y_LSB 0x63
YutaTogashi 0:4092428e9e15 91 #define BNO055P0_GYR_OFFSET_Y_MSB 0x64
YutaTogashi 0:4092428e9e15 92 #define BNO055P0_GYR_OFFSET_Z_LSB 0x65
YutaTogashi 0:4092428e9e15 93 #define BNO055P0_GYR_OFFSET_Z_MSB 0x66
YutaTogashi 0:4092428e9e15 94 #define BNO055P0_ACC_RADIUS_LSB 0x67
YutaTogashi 0:4092428e9e15 95 #define BNO055P0_ACC_RADIUS_MSB 0x68
YutaTogashi 0:4092428e9e15 96 #define BNO055P0_MAG_RADIUS_LSB 0x69
YutaTogashi 0:4092428e9e15 97 #define BNO055P0_MAG_RADIUS_MSB 0x6A
YutaTogashi 0:4092428e9e15 98
YutaTogashi 0:4092428e9e15 99 #define BNO055P1_ACC_CONFIG 0x08
YutaTogashi 0:4092428e9e15 100 #define BNO055P1_MAG_CONFIG 0x09
YutaTogashi 0:4092428e9e15 101 #define BNO055P1_GYR_CONFIG_0 0x0A
YutaTogashi 0:4092428e9e15 102 #define BNO055P1_GYR_CONFIG_1 0x0B
YutaTogashi 0:4092428e9e15 103 #define BNO055P1_ACC_SLEEP_CONFIG 0x0C
YutaTogashi 0:4092428e9e15 104 #define BNO055P1_GYR_SLEEP_CONFIG 0x0D
YutaTogashi 0:4092428e9e15 105 #define BNO055P1_INT_MSK 0x0F
YutaTogashi 0:4092428e9e15 106 #define BNO055P1_INT_EN 0x10
YutaTogashi 0:4092428e9e15 107 #define BNO055P1_ACC_AM_THRES 0x11
YutaTogashi 0:4092428e9e15 108 #define BNO055P1_ACC_INT_SETTINGS 0x12
YutaTogashi 0:4092428e9e15 109 #define BNO055P1_ACC_HG_DURATION 0x13
YutaTogashi 0:4092428e9e15 110 #define BNO055P1_ACC_HG_THRES 0x14
YutaTogashi 0:4092428e9e15 111 #define BNO055P1_ACC_NM_THRES 0x15
YutaTogashi 0:4092428e9e15 112 #define BNO055P1_ACC_NM_SET 0x16
YutaTogashi 0:4092428e9e15 113 #define BNO055P1_GYR_INT_SETING 0x17
YutaTogashi 0:4092428e9e15 114 #define BNO055P1_GYR_HR_X_SET 0x18
YutaTogashi 0:4092428e9e15 115 #define BNO055P1_GYR_DUR_X 0x19
YutaTogashi 0:4092428e9e15 116 #define BNO055P1_GYR_HR_Y_SET 0x1A
YutaTogashi 0:4092428e9e15 117 #define BNO055P1_GYR_DUR_Y 0x1B
YutaTogashi 0:4092428e9e15 118 #define BNO055P1_GYR_HR_Z_SET 0x1C
YutaTogashi 0:4092428e9e15 119 #define BNO055P1_GYR_DUR_Z 0x1D
YutaTogashi 0:4092428e9e15 120 #define BNO055P1_GYR_AM_THRES 0x1E
YutaTogashi 0:4092428e9e15 121 #define BNO055P1_GYR_AM_SET 0x1F
YutaTogashi 0:4092428e9e15 122
YutaTogashi 0:4092428e9e15 123 class BNO055_CTRL{
YutaTogashi 0:4092428e9e15 124 public:
YutaTogashi 0:4092428e9e15 125 BNO055_CTRL();
YutaTogashi 0:4092428e9e15 126 virtual ~BNO055_CTRL();
YutaTogashi 0:4092428e9e15 127 protected:
YutaTogashi 0:4092428e9e15 128 bool page1;
YutaTogashi 0:4092428e9e15 129 char *ary;
YutaTogashi 0:4092428e9e15 130 char lastError;
YutaTogashi 0:4092428e9e15 131 char lastLength;
YutaTogashi 0:4092428e9e15 132 public:
YutaTogashi 0:4092428e9e15 133 char getNowPage();
YutaTogashi 0:4092428e9e15 134 char getLastError();
YutaTogashi 0:4092428e9e15 135 char getLastLength();
YutaTogashi 0:4092428e9e15 136 virtual void init();
YutaTogashi 0:4092428e9e15 137 virtual char rr(bool isPage1, char regAddr);
YutaTogashi 0:4092428e9e15 138 virtual char rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length);
YutaTogashi 0:4092428e9e15 139 virtual char wr(bool isPage1, char regAddr, char wBytes);
YutaTogashi 0:4092428e9e15 140 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length);
YutaTogashi 0:4092428e9e15 141 };
YutaTogashi 0:4092428e9e15 142
YutaTogashi 0:4092428e9e15 143 class BNO055_UART_CTRL : public BNO055_CTRL{
YutaTogashi 0:4092428e9e15 144 public:
YutaTogashi 0:4092428e9e15 145 BNO055_UART_CTRL(RawSerial *uart);
YutaTogashi 0:4092428e9e15 146 virtual ~BNO055_UART_CTRL();
YutaTogashi 0:4092428e9e15 147 private:
YutaTogashi 0:4092428e9e15 148 RawSerial *iface;
YutaTogashi 0:4092428e9e15 149 short rxd;
YutaTogashi 0:4092428e9e15 150 bool read_mark;
YutaTogashi 0:4092428e9e15 151
YutaTogashi 0:4092428e9e15 152 void rxInterrupt();
YutaTogashi 0:4092428e9e15 153 public:
YutaTogashi 0:4092428e9e15 154 virtual void init();
YutaTogashi 0:4092428e9e15 155 virtual char rr(bool isPage1, char regAddr);
YutaTogashi 0:4092428e9e15 156 virtual char rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length);
YutaTogashi 0:4092428e9e15 157 virtual char wr(bool isPage1, char regAddr, char wBytes);
YutaTogashi 0:4092428e9e15 158 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length);
YutaTogashi 0:4092428e9e15 159 };
YutaTogashi 0:4092428e9e15 160
YutaTogashi 0:4092428e9e15 161 class BNO055_I2C_CTRL : public BNO055_CTRL{
YutaTogashi 0:4092428e9e15 162 public:
YutaTogashi 0:4092428e9e15 163 BNO055_I2C_CTRL(I2C *iic, char addr, unsigned int freq);
YutaTogashi 0:4092428e9e15 164 virtual ~BNO055_I2C_CTRL();
YutaTogashi 0:4092428e9e15 165 private:
YutaTogashi 0:4092428e9e15 166 I2C *iface;
YutaTogashi 0:4092428e9e15 167 char i2c_writeAddr;
YutaTogashi 0:4092428e9e15 168 char i2c_readAddr;
YutaTogashi 0:4092428e9e15 169 unsigned int i2c_freq;
YutaTogashi 0:4092428e9e15 170 public:
YutaTogashi 0:4092428e9e15 171 virtual void init();
YutaTogashi 0:4092428e9e15 172 virtual char rr(bool isPage1, char regAddr);
YutaTogashi 0:4092428e9e15 173 virtual char rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length);
YutaTogashi 0:4092428e9e15 174 virtual char wr(bool isPage1, char regAddr, char wBytes);
YutaTogashi 0:4092428e9e15 175 virtual char wrc(bool isPage1, char startRegAddr, char *Bytes, char length);
YutaTogashi 0:4092428e9e15 176 };
YutaTogashi 0:4092428e9e15 177
YutaTogashi 0:4092428e9e15 178 class BOARDC_BNO055{
YutaTogashi 0:4092428e9e15 179 public:
YutaTogashi 0:4092428e9e15 180 BOARDC_BNO055(PinName tx, PinName rx);
YutaTogashi 0:4092428e9e15 181 BOARDC_BNO055(RawSerial *uart);
YutaTogashi 0:4092428e9e15 182 BOARDC_BNO055(PinName scl, PinName sda, char addr=BNO055_I2C_DEFADDR, unsigned int freq=100000);
YutaTogashi 0:4092428e9e15 183 BOARDC_BNO055(I2C *iic, char addr=BNO055_I2C_DEFADDR, unsigned int freq=100000);
YutaTogashi 0:4092428e9e15 184 ~BOARDC_BNO055();
YutaTogashi 0:4092428e9e15 185
YutaTogashi 0:4092428e9e15 186 private:
YutaTogashi 0:4092428e9e15 187 BNO055_CTRL *ctrl;
YutaTogashi 0:4092428e9e15 188 float scaleACC;
YutaTogashi 0:4092428e9e15 189 float scaleMAG; //fixed
YutaTogashi 0:4092428e9e15 190 float scaleGYRO;
YutaTogashi 0:4092428e9e15 191 float scaleTEMP;
YutaTogashi 0:4092428e9e15 192 float scaleEuler;
YutaTogashi 0:4092428e9e15 193 float scaleLIA; //=scaleACC
YutaTogashi 0:4092428e9e15 194 float scaleGV; //=scaleACC
YutaTogashi 0:4092428e9e15 195 double scaleQuaternion; //fixed
YutaTogashi 0:4092428e9e15 196 unsigned char axisRemap;
YutaTogashi 0:4092428e9e15 197 unsigned char axisSign;
YutaTogashi 0:4092428e9e15 198 bool clkExt;
YutaTogashi 0:4092428e9e15 199
YutaTogashi 0:4092428e9e15 200 public:
YutaTogashi 0:4092428e9e15 201 char initialize(bool resetIface=true);
YutaTogashi 0:4092428e9e15 202 char getIfaceLastError();
YutaTogashi 0:4092428e9e15 203 char getIfaceLastLength();
YutaTogashi 0:4092428e9e15 204
YutaTogashi 0:4092428e9e15 205 char customRead(bool isPage1, char regAddr);
YutaTogashi 0:4092428e9e15 206 char customReadC(bool isPage1, char startRegAddr, char *receiveBytes, unsigned char length);
YutaTogashi 0:4092428e9e15 207 char customWrite(bool isPage1, char regAddr, char wBytes);
YutaTogashi 0:4092428e9e15 208 char customWriteC(bool isPage1, char startRegAddr, char *Bytes, unsigned char length);
YutaTogashi 0:4092428e9e15 209
YutaTogashi 0:4092428e9e15 210 char getPage();
YutaTogashi 0:4092428e9e15 211 void setPage(unsigned char pageNo);
YutaTogashi 0:4092428e9e15 212
YutaTogashi 0:4092428e9e15 213 char getChipID();
YutaTogashi 0:4092428e9e15 214 char getAccChipID();
YutaTogashi 0:4092428e9e15 215 char getMagChipID();
YutaTogashi 0:4092428e9e15 216 char getGyroChipID();
YutaTogashi 0:4092428e9e15 217
YutaTogashi 0:4092428e9e15 218 short getRevision();
YutaTogashi 0:4092428e9e15 219 char getBootRevision();
YutaTogashi 0:4092428e9e15 220
YutaTogashi 0:4092428e9e15 221 float getAccScale();
YutaTogashi 0:4092428e9e15 222 float getMagScale();
YutaTogashi 0:4092428e9e15 223 float getGyroScale();
YutaTogashi 0:4092428e9e15 224 float getTempScale();
YutaTogashi 0:4092428e9e15 225 float getEulerScale();
YutaTogashi 0:4092428e9e15 226 float getLinearScale();
YutaTogashi 0:4092428e9e15 227 float getGVScale();
YutaTogashi 0:4092428e9e15 228 double getQuaternionScale();
YutaTogashi 0:4092428e9e15 229
YutaTogashi 0:4092428e9e15 230 void getAccDataAll(short &accX, short &accY, short &accZ);
YutaTogashi 0:4092428e9e15 231 short getAccDataX();
YutaTogashi 0:4092428e9e15 232 short getAccDataY();
YutaTogashi 0:4092428e9e15 233 short getAccDataZ();
YutaTogashi 0:4092428e9e15 234
YutaTogashi 0:4092428e9e15 235 void getMagDataAll(short &magX, short &magY, short &magZ);
YutaTogashi 0:4092428e9e15 236 short getMagDataX();
YutaTogashi 0:4092428e9e15 237 short getMagDataY();
YutaTogashi 0:4092428e9e15 238 short getMagDataZ();
YutaTogashi 0:4092428e9e15 239
YutaTogashi 0:4092428e9e15 240 void getGyroDataAll(short &gyroX, short &gyroY, short &gyroZ);
YutaTogashi 0:4092428e9e15 241 short getGyroDataX();
YutaTogashi 0:4092428e9e15 242 short getGyroDataY();
YutaTogashi 0:4092428e9e15 243 short getGyroDataZ();
YutaTogashi 0:4092428e9e15 244
YutaTogashi 0:4092428e9e15 245 void getEulerDataAll(short &E_heading, short &E_roll, short &E_pitch);
YutaTogashi 0:4092428e9e15 246 short getEulerDataHeading();
YutaTogashi 0:4092428e9e15 247 short getEulerDataYaw();
YutaTogashi 0:4092428e9e15 248 short getEulerDataRoll();
YutaTogashi 0:4092428e9e15 249 short getEulerDataPitch();
YutaTogashi 0:4092428e9e15 250
YutaTogashi 0:4092428e9e15 251 void get9Axis(short *box);
YutaTogashi 0:4092428e9e15 252 void get9AxisAndEUL(short *box);
YutaTogashi 0:4092428e9e15 253
YutaTogashi 0:4092428e9e15 254 void getQuaternion(short &q1, short &q2, short &q3, short &q4);
YutaTogashi 0:4092428e9e15 255
YutaTogashi 0:4092428e9e15 256 void getLinearAccDataAll(short &L_accX, short &L_accY, short &L_accZ);
YutaTogashi 0:4092428e9e15 257 short getLinearAccDataX();
YutaTogashi 0:4092428e9e15 258 short getLinearAccDataY();
YutaTogashi 0:4092428e9e15 259 short getLinearAccDataZ();
YutaTogashi 0:4092428e9e15 260
YutaTogashi 0:4092428e9e15 261 void getGVectorDataAll(short &gvX, short &gvY, short &gvZ);
YutaTogashi 0:4092428e9e15 262 short getGVectorDataX();
YutaTogashi 0:4092428e9e15 263 short getGVectorDataY();
YutaTogashi 0:4092428e9e15 264 short getGVectorDataZ();
YutaTogashi 0:4092428e9e15 265
YutaTogashi 0:4092428e9e15 266 char getTemperature();
YutaTogashi 0:4092428e9e15 267
YutaTogashi 0:4092428e9e15 268 void getCalibStatusAll(char &sys, char &acc, char &mag, char &gyro);
YutaTogashi 0:4092428e9e15 269 char getCalibStatusSys();
YutaTogashi 0:4092428e9e15 270 char getCalibStatusAcc();
YutaTogashi 0:4092428e9e15 271 char getCalibStatusMag();
YutaTogashi 0:4092428e9e15 272 char getCalibStatusGyro();
YutaTogashi 0:4092428e9e15 273
YutaTogashi 0:4092428e9e15 274 char getSelfTestResultAll();
YutaTogashi 0:4092428e9e15 275 bool getSelfTestResultMCU();
YutaTogashi 0:4092428e9e15 276 bool getSelfTestResultAcc();
YutaTogashi 0:4092428e9e15 277 bool getSelfTestResultMag();
YutaTogashi 0:4092428e9e15 278 bool getSelfTestResultGyro();
YutaTogashi 0:4092428e9e15 279
YutaTogashi 0:4092428e9e15 280 char triggeredIntALL();
YutaTogashi 0:4092428e9e15 281 bool triggeredACC_NM();
YutaTogashi 0:4092428e9e15 282 bool triggeredACC_AM();
YutaTogashi 0:4092428e9e15 283 bool triggeredACC_HIGH_G();
YutaTogashi 0:4092428e9e15 284 bool triggeredGYR_HIGH_RATE();
YutaTogashi 0:4092428e9e15 285 bool triggeredGYRO_AM();
YutaTogashi 0:4092428e9e15 286
YutaTogashi 0:4092428e9e15 287 bool isSystemClockFixed();
YutaTogashi 0:4092428e9e15 288
YutaTogashi 0:4092428e9e15 289 char getSystemStatus();
YutaTogashi 0:4092428e9e15 290 char getSystemError();
YutaTogashi 0:4092428e9e15 291
YutaTogashi 0:4092428e9e15 292 char getUNIT_SEL();
YutaTogashi 0:4092428e9e15 293 char setUNIT_SEL(char selectValue);
YutaTogashi 0:4092428e9e15 294 char setUNIT_AccUnit(bool isMeterPerSec2=true);
YutaTogashi 0:4092428e9e15 295 char setUNIT_GyroUnit(bool isDps=true);
YutaTogashi 0:4092428e9e15 296 char setUNIT_EulerUnit(bool isDegrees=true);
YutaTogashi 0:4092428e9e15 297 char setUNIT_Temperature(bool isCelsius=true);
YutaTogashi 0:4092428e9e15 298 char setUNIT_OrientationMode(bool ori_Android=true);
YutaTogashi 0:4092428e9e15 299
YutaTogashi 0:4092428e9e15 300 char getOperationMode();
YutaTogashi 0:4092428e9e15 301 char setOperationMode(char modeValue);
YutaTogashi 0:4092428e9e15 302 char setOperation_CONFIG();
YutaTogashi 0:4092428e9e15 303 char setOperation_ACCONRY();
YutaTogashi 0:4092428e9e15 304 char setOperation_MAGONRY();
YutaTogashi 0:4092428e9e15 305 char setOperation_GYROONRY();
YutaTogashi 0:4092428e9e15 306 char setOperation_ACCMAG();
YutaTogashi 0:4092428e9e15 307 char setOperation_ACCGYRO();
YutaTogashi 0:4092428e9e15 308 char setOperation_MAGGYRO();
YutaTogashi 0:4092428e9e15 309 char setOperation_AMG();
YutaTogashi 0:4092428e9e15 310 char setOperation_Fusion_IMU();
YutaTogashi 0:4092428e9e15 311 char setOperation_Fusion_COMPASS();
YutaTogashi 0:4092428e9e15 312 char setOperation_Fusion_M4G();
YutaTogashi 0:4092428e9e15 313 char setOperation_Fusion_NDOF_FMC_OFF();
YutaTogashi 0:4092428e9e15 314 char setOperation_Fusion_NDOF();
YutaTogashi 0:4092428e9e15 315
YutaTogashi 0:4092428e9e15 316 char getPowerMode();
YutaTogashi 0:4092428e9e15 317 char setPowerMode(unsigned char modeValue);
YutaTogashi 0:4092428e9e15 318 char setPowerMode_Normal();
YutaTogashi 0:4092428e9e15 319 char setPowerMode_LowPower();
YutaTogashi 0:4092428e9e15 320 char setPowerMode_Suspend();
YutaTogashi 0:4092428e9e15 321
YutaTogashi 0:4092428e9e15 322 char setSysTrigger(char regVal);
YutaTogashi 0:4092428e9e15 323 char setSys_ExternalCrystal(bool isExternal=true);
YutaTogashi 0:4092428e9e15 324 char resetInterrupt();
YutaTogashi 0:4092428e9e15 325 char soft_reset();
YutaTogashi 0:4092428e9e15 326 char execSelfTest();
YutaTogashi 0:4092428e9e15 327
YutaTogashi 0:4092428e9e15 328 char getTempSource();
YutaTogashi 0:4092428e9e15 329 char setTempSource(bool Accelerometer=true);
YutaTogashi 0:4092428e9e15 330
YutaTogashi 0:4092428e9e15 331 char getAxisMapConfig();
YutaTogashi 0:4092428e9e15 332 char setAxisMapConfig(char val);
YutaTogashi 0:4092428e9e15 333 char getAxisMapSign();
YutaTogashi 0:4092428e9e15 334 char setAxisMapSign(char val);
YutaTogashi 0:4092428e9e15 335 char setAxisRemap_topview_topleft();
YutaTogashi 0:4092428e9e15 336 char setAxisRemap_topview_topright();
YutaTogashi 0:4092428e9e15 337 char setAxisRemap_topview_bottomleft();
YutaTogashi 0:4092428e9e15 338 char setAxisRemap_topview_bottomright();
YutaTogashi 0:4092428e9e15 339 char setAxisRemap_bottomview_topleft();
YutaTogashi 0:4092428e9e15 340 char setAxisRemap_bottomview_topright();
YutaTogashi 0:4092428e9e15 341 char setAxisRemap_bottomview_bottomleft();
YutaTogashi 0:4092428e9e15 342 char setAxisRemap_bottomview_bottomright();
YutaTogashi 0:4092428e9e15 343 char getAxisRemap_type();
YutaTogashi 0:4092428e9e15 344
YutaTogashi 0:4092428e9e15 345 void getAccOffsetAll(float &offsetX, float &offsetY, float &offsetZ);
YutaTogashi 0:4092428e9e15 346 float getAccOffsetX();
YutaTogashi 0:4092428e9e15 347 float getAccOffsetY();
YutaTogashi 0:4092428e9e15 348 float getAccOffsetZ();
YutaTogashi 0:4092428e9e15 349 char setAccOffsetAll(float offsetX, float offsetY, float offsetZ);
YutaTogashi 0:4092428e9e15 350 char setAccOffsetX(float offset);
YutaTogashi 0:4092428e9e15 351 char setAccOffsetY(float offset);
YutaTogashi 0:4092428e9e15 352 char setAccOffsetZ(float offset);
YutaTogashi 0:4092428e9e15 353
YutaTogashi 0:4092428e9e15 354 void getMagOffsetAll(float &offsetX, float &offsetY, float &offsetZ);
YutaTogashi 0:4092428e9e15 355 float getMagOffsetX();
YutaTogashi 0:4092428e9e15 356 float getMagOffsetY();
YutaTogashi 0:4092428e9e15 357 float getMagOffsetZ();
YutaTogashi 0:4092428e9e15 358 char setMagOffsetAll(float offsetX, float offsetY, float offsetZ);
YutaTogashi 0:4092428e9e15 359 char setMagOffsetX(float offset);
YutaTogashi 0:4092428e9e15 360 char setMagOffsetY(float offset);
YutaTogashi 0:4092428e9e15 361 char setMagOffsetZ(float offset);
YutaTogashi 0:4092428e9e15 362
YutaTogashi 0:4092428e9e15 363 void getGyroOffsetAll(float &offsetX, float &offsetY, float &offsetZ);
YutaTogashi 0:4092428e9e15 364 float getGyroOffsetX();
YutaTogashi 0:4092428e9e15 365 float getGyroOffsetY();
YutaTogashi 0:4092428e9e15 366 float getGyroOffsetZ();
YutaTogashi 0:4092428e9e15 367 char setGyroOffsetAll(float offsetX, float offsetY, float offsetZ);
YutaTogashi 0:4092428e9e15 368 char setGyroOffsetX(float offset);
YutaTogashi 0:4092428e9e15 369 char setGyroOffsetY(float offset);
YutaTogashi 0:4092428e9e15 370 char setGyroOffsetZ(float offset);
YutaTogashi 0:4092428e9e15 371
YutaTogashi 0:4092428e9e15 372 short getAccRadius();
YutaTogashi 0:4092428e9e15 373 char setAccRadius(short LSB);
YutaTogashi 0:4092428e9e15 374
YutaTogashi 0:4092428e9e15 375 short getMagRadius();
YutaTogashi 0:4092428e9e15 376 char setMagRadius(short LSB);
YutaTogashi 0:4092428e9e15 377
YutaTogashi 0:4092428e9e15 378 char getAccConfig();
YutaTogashi 0:4092428e9e15 379 char setAccConfig(char regVal);
YutaTogashi 0:4092428e9e15 380 char setAccConfig(char gRange, char bandWidth, char powMode);
YutaTogashi 0:4092428e9e15 381 char setAccRange(unsigned char G);
YutaTogashi 0:4092428e9e15 382
YutaTogashi 0:4092428e9e15 383 char getMagConfig();
YutaTogashi 0:4092428e9e15 384 char setMagConfig(char regVal);
YutaTogashi 0:4092428e9e15 385 char setMagConfig(char rate, char oprMode, char powMode);
YutaTogashi 0:4092428e9e15 386
YutaTogashi 0:4092428e9e15 387 char getGyroConfig_0();
YutaTogashi 0:4092428e9e15 388 char setGyroConfig_0(char regVal);
YutaTogashi 0:4092428e9e15 389 char setGyroConfig_0(char range, char bandWidth);
YutaTogashi 0:4092428e9e15 390 char getGyroConfig_1();
YutaTogashi 0:4092428e9e15 391 char setGyroConfig_1(char powMode);
YutaTogashi 0:4092428e9e15 392 char setGyroRange(unsigned short dps);
YutaTogashi 0:4092428e9e15 393
YutaTogashi 0:4092428e9e15 394 char getAccSleepConfig();
YutaTogashi 0:4092428e9e15 395 char setAccSleepConfig(char regVal);
YutaTogashi 0:4092428e9e15 396 char setAccSleepConfig(char duration, char mode);
YutaTogashi 0:4092428e9e15 397
YutaTogashi 0:4092428e9e15 398 char getGyroSleepConfig();
YutaTogashi 0:4092428e9e15 399 char setGyroSleepConfig(char regVal);
YutaTogashi 0:4092428e9e15 400 char setGyroSleepConfig(char autoSleepDuration, char duration);
YutaTogashi 0:4092428e9e15 401
YutaTogashi 0:4092428e9e15 402 char getInterruptMask();
YutaTogashi 0:4092428e9e15 403 char setInterruptMask(char mask);
YutaTogashi 0:4092428e9e15 404
YutaTogashi 0:4092428e9e15 405 char getInterruptEnable();
YutaTogashi 0:4092428e9e15 406 char setInterruptEnable(char mask);
YutaTogashi 0:4092428e9e15 407
YutaTogashi 0:4092428e9e15 408 float getAccAnyMotionThreashold(bool ismg=true);
YutaTogashi 0:4092428e9e15 409 char setAccAnyMotionThreashold(bool ismg, float threashold);
YutaTogashi 0:4092428e9e15 410
YutaTogashi 0:4092428e9e15 411 char getAccInterruptSettings();
YutaTogashi 0:4092428e9e15 412 char setAccInterruptSettings(char settings);
YutaTogashi 0:4092428e9e15 413
YutaTogashi 0:4092428e9e15 414 unsigned short getAccHighGduration();
YutaTogashi 0:4092428e9e15 415 char setAccHighGduration(short ms);
YutaTogashi 0:4092428e9e15 416
YutaTogashi 0:4092428e9e15 417 float getAccHighGThreashold(bool ismg=true);
YutaTogashi 0:4092428e9e15 418 char setAccHighGThreashold(bool ismg, float threashold);
YutaTogashi 0:4092428e9e15 419
YutaTogashi 0:4092428e9e15 420 float getAccNMThreashold(bool ismg=true);
YutaTogashi 0:4092428e9e15 421 char setAccNMThreashold(bool ismg, float threashold);
YutaTogashi 0:4092428e9e15 422
YutaTogashi 0:4092428e9e15 423 char getAccNMsetting();
YutaTogashi 0:4092428e9e15 424 char setAccNMsetting(char setting);
YutaTogashi 0:4092428e9e15 425
YutaTogashi 0:4092428e9e15 426 char getGyroInterruptSettings();
YutaTogashi 0:4092428e9e15 427 char setGyroInterruptSettings(char settings);
YutaTogashi 0:4092428e9e15 428
YutaTogashi 0:4092428e9e15 429 char getGyroHighRateXsetting();
YutaTogashi 0:4092428e9e15 430 void getGyroHighRateXsetting_dps(float &hyst, float &thres);
YutaTogashi 0:4092428e9e15 431 char setGyroHighRateXsetting(char setting);
YutaTogashi 0:4092428e9e15 432 char setGyroHighRateXsetting_dps(float hystVal, float thresVal);
YutaTogashi 0:4092428e9e15 433 float getGyroHighRateXduration();
YutaTogashi 0:4092428e9e15 434 char setGyroHighRateXduration(float duration);
YutaTogashi 0:4092428e9e15 435
YutaTogashi 0:4092428e9e15 436 char getGyroHighRateYsetting();
YutaTogashi 0:4092428e9e15 437 void getGyroHighRateYsetting_dps(float &hyst, float &thres);
YutaTogashi 0:4092428e9e15 438 char setGyroHighRateYsetting(char setting);
YutaTogashi 0:4092428e9e15 439 char setGyroHighRateYsetting_dps(float hystVal, float thresVal);
YutaTogashi 0:4092428e9e15 440 float getGyroHighRateYduration();
YutaTogashi 0:4092428e9e15 441 char setGyroHighRateYduration(float duration);
YutaTogashi 0:4092428e9e15 442
YutaTogashi 0:4092428e9e15 443 char getGyroHighRateZsetting();
YutaTogashi 0:4092428e9e15 444 void getGyroHighRateZsetting_dps(float &hyst, float &thres);
YutaTogashi 0:4092428e9e15 445 char setGyroHighRateZsetting(char setting);
YutaTogashi 0:4092428e9e15 446 char setGyroHighRateZsetting_dps(float hystVal, float thresVal);
YutaTogashi 0:4092428e9e15 447 float getGyroHighRateZduration();
YutaTogashi 0:4092428e9e15 448 char setGyroHighRateZduration(float duration);
YutaTogashi 0:4092428e9e15 449
YutaTogashi 0:4092428e9e15 450 float getGyroAnyMotionThreashold();
YutaTogashi 0:4092428e9e15 451 char setGyroAnyMotionThreashold(float threashold);
YutaTogashi 0:4092428e9e15 452
YutaTogashi 0:4092428e9e15 453 char getAccAnyMotionSetting();
YutaTogashi 0:4092428e9e15 454 char setAccAnyMotionSetting(char setting);
YutaTogashi 0:4092428e9e15 455 };
YutaTogashi 0:4092428e9e15 456
YutaTogashi 0:4092428e9e15 457 #endif
YutaTogashi 0:4092428e9e15 458
YutaTogashi 0:4092428e9e15 459
YutaTogashi 0:4092428e9e15 460 //CLASS:BNO055_CTRL//////////////////////////////////////////////////
YutaTogashi 0:4092428e9e15 461 /* ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 462 * BNO055_UART_CTRLクラスとBNO055_I2C_CTRLクラスの基底クラス(インターフェース)
YutaTogashi 0:4092428e9e15 463 * UARTとI2Cをヘッダ書き換えなしで実現するために無理するとこうなった
YutaTogashi 0:4092428e9e15 464 */
YutaTogashi 0:4092428e9e15 465
YutaTogashi 0:4092428e9e15 466 /* ==================================================================
YutaTogashi 0:4092428e9e15 467 * デフォルトコンストラクタ
YutaTogashi 0:4092428e9e15 468 */
YutaTogashi 0:4092428e9e15 469 BNO055_CTRL::BNO055_CTRL(){
YutaTogashi 0:4092428e9e15 470 lastError = 0;
YutaTogashi 0:4092428e9e15 471 lastLength = 0;
YutaTogashi 0:4092428e9e15 472 }
YutaTogashi 0:4092428e9e15 473
YutaTogashi 0:4092428e9e15 474 /* ==================================================================
YutaTogashi 0:4092428e9e15 475 * デフォルトデストラクタ
YutaTogashi 0:4092428e9e15 476 */
YutaTogashi 0:4092428e9e15 477 BNO055_CTRL::~BNO055_CTRL(){}
YutaTogashi 0:4092428e9e15 478
YutaTogashi 0:4092428e9e15 479 /* ==================================================================
YutaTogashi 0:4092428e9e15 480 * 現在のページIDを取得する
YutaTogashi 0:4092428e9e15 481 */
YutaTogashi 0:4092428e9e15 482 char BNO055_CTRL::getNowPage(){
YutaTogashi 0:4092428e9e15 483 return page1 ? 1 : 0;
YutaTogashi 0:4092428e9e15 484 }
YutaTogashi 0:4092428e9e15 485
YutaTogashi 0:4092428e9e15 486 /* ==================================================================
YutaTogashi 0:4092428e9e15 487 * UARTまたはI2Cで取得した最後のエラーを取得する:通信がうまくいかないときの原因追及
YutaTogashi 0:4092428e9e15 488 */
YutaTogashi 0:4092428e9e15 489 char BNO055_CTRL::getLastError(){
YutaTogashi 0:4092428e9e15 490 return lastError;
YutaTogashi 0:4092428e9e15 491 }
YutaTogashi 0:4092428e9e15 492
YutaTogashi 0:4092428e9e15 493 /* ==================================================================
YutaTogashi 0:4092428e9e15 494 * UARTまたはI2Cで通信した際の受信バイト数を取得する:通信がうまくいかないときの原因追及
YutaTogashi 0:4092428e9e15 495 */
YutaTogashi 0:4092428e9e15 496 char BNO055_CTRL::getLastLength(){
YutaTogashi 0:4092428e9e15 497 return lastLength;
YutaTogashi 0:4092428e9e15 498 }
YutaTogashi 0:4092428e9e15 499
YutaTogashi 0:4092428e9e15 500 /* ==================================================================
YutaTogashi 0:4092428e9e15 501 * 未実装関数(子クラスで実装される)
YutaTogashi 0:4092428e9e15 502 */
YutaTogashi 0:4092428e9e15 503 void BNO055_CTRL::init(){}
YutaTogashi 0:4092428e9e15 504 char BNO055_CTRL::rr(bool isPage1, char regAddr){return 0;}
YutaTogashi 0:4092428e9e15 505 char BNO055_CTRL::rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length){return 0;}
YutaTogashi 0:4092428e9e15 506 char BNO055_CTRL::wr(bool isPage1, char regAddr, char wBytes){return 0;}
YutaTogashi 0:4092428e9e15 507 char BNO055_CTRL::wrc(bool isPage1, char startRegAddr, char *Bytes, char length){return 0;}
YutaTogashi 0:4092428e9e15 508
YutaTogashi 0:4092428e9e15 509
YutaTogashi 0:4092428e9e15 510
YutaTogashi 0:4092428e9e15 511
YutaTogashi 0:4092428e9e15 512
YutaTogashi 0:4092428e9e15 513
YutaTogashi 0:4092428e9e15 514
YutaTogashi 0:4092428e9e15 515
YutaTogashi 0:4092428e9e15 516
YutaTogashi 0:4092428e9e15 517
YutaTogashi 0:4092428e9e15 518 //CLASS:BNO055_UART_CTRL/////////////////////////////////////////////
YutaTogashi 0:4092428e9e15 519 /* ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 520 * BNO055_CTRLクラス(インターフェース)を継承(実装)したクラス
YutaTogashi 0:4092428e9e15 521 * UARTで命令を送受信するためのコントロール用クラス
YutaTogashi 0:4092428e9e15 522 */
YutaTogashi 0:4092428e9e15 523
YutaTogashi 0:4092428e9e15 524 /* ==================================================================
YutaTogashi 0:4092428e9e15 525 * BNO055をUARTでコントロールするためのクラス:コンストラクタ
YutaTogashi 0:4092428e9e15 526 */
YutaTogashi 0:4092428e9e15 527 BNO055_UART_CTRL::BNO055_UART_CTRL(RawSerial *uart){
YutaTogashi 0:4092428e9e15 528 iface = uart;
YutaTogashi 0:4092428e9e15 529 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 530 read_mark = true;
YutaTogashi 0:4092428e9e15 531
YutaTogashi 0:4092428e9e15 532 page1 = true;
YutaTogashi 0:4092428e9e15 533
YutaTogashi 0:4092428e9e15 534 ary = new char[BNO055_UART_BUF_MAXLEN + 5];
YutaTogashi 0:4092428e9e15 535 memset(ary, 0, BNO055_UART_BUF_MAXLEN + 5);
YutaTogashi 0:4092428e9e15 536 lastError = 0;
YutaTogashi 0:4092428e9e15 537 }
YutaTogashi 0:4092428e9e15 538
YutaTogashi 0:4092428e9e15 539 /* ==================================================================
YutaTogashi 0:4092428e9e15 540 * BNO055をUARTでコントロールするためのクラス:デストラクタ
YutaTogashi 0:4092428e9e15 541 */
YutaTogashi 0:4092428e9e15 542 BNO055_UART_CTRL::~BNO055_UART_CTRL(){
YutaTogashi 0:4092428e9e15 543 delete iface;
YutaTogashi 0:4092428e9e15 544 }
YutaTogashi 0:4092428e9e15 545
YutaTogashi 0:4092428e9e15 546 /* ==================================================================
YutaTogashi 0:4092428e9e15 547 * UART受信割り込み用関数
YutaTogashi 0:4092428e9e15 548 * RX受信トリガがONになると、カウンタを加算する
YutaTogashi 0:4092428e9e15 549 */
YutaTogashi 0:4092428e9e15 550 void BNO055_UART_CTRL::rxInterrupt(){
YutaTogashi 0:4092428e9e15 551 if(read_mark){
YutaTogashi 0:4092428e9e15 552 rxd = iface->getc();
YutaTogashi 0:4092428e9e15 553 read_mark = false;
YutaTogashi 0:4092428e9e15 554 }
YutaTogashi 0:4092428e9e15 555 }
YutaTogashi 0:4092428e9e15 556
YutaTogashi 0:4092428e9e15 557 /* ==================================================================
YutaTogashi 0:4092428e9e15 558 * <UART>
YutaTogashi 0:4092428e9e15 559 * レジスタの内容を読み取り(1byteのみ)
YutaTogashi 0:4092428e9e15 560 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 561 * returns:
YutaTogashi 0:4092428e9e15 562 * -1 失敗
YutaTogashi 0:4092428e9e15 563 * それ以外 成功した際に取得したデータ
YutaTogashi 0:4092428e9e15 564 */
YutaTogashi 0:4092428e9e15 565 char BNO055_UART_CTRL::rr(bool isPage1, char regAddr){
YutaTogashi 0:4092428e9e15 566 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 567 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 568 wr(page1, BNO055_PAGE_ID, (isPage1) ? 1 : 0);
YutaTogashi 0:4092428e9e15 569 page1 = isPage1;
YutaTogashi 0:4092428e9e15 570 }
YutaTogashi 0:4092428e9e15 571
YutaTogashi 0:4092428e9e15 572 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 573 do{wait_ms(1);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 574
YutaTogashi 0:4092428e9e15 575 //コマンドをセット
YutaTogashi 0:4092428e9e15 576 ary[0] = 0xAA; //StartByte(固定)
YutaTogashi 0:4092428e9e15 577 ary[1] = 0x01; //読み取り
YutaTogashi 0:4092428e9e15 578 ary[2] = regAddr; //レジスタアドレス
YutaTogashi 0:4092428e9e15 579 ary[3] = 1; //バイト長
YutaTogashi 0:4092428e9e15 580
YutaTogashi 0:4092428e9e15 581 //送信
YutaTogashi 0:4092428e9e15 582 iface->putc(ary[0]);
YutaTogashi 0:4092428e9e15 583 iface->putc(ary[1]);
YutaTogashi 0:4092428e9e15 584 iface->putc(ary[2]);
YutaTogashi 0:4092428e9e15 585 iface->putc(ary[3]);
YutaTogashi 0:4092428e9e15 586
YutaTogashi 0:4092428e9e15 587 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 588 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 589
YutaTogashi 0:4092428e9e15 590 lastError = 0;
YutaTogashi 0:4092428e9e15 591 memset(ary, 0, BNO055_UART_BUF_MAXLEN + 5); //配列ゼロクリア
YutaTogashi 0:4092428e9e15 592
YutaTogashi 0:4092428e9e15 593 ary[0] = rxd & 0xFF;
YutaTogashi 0:4092428e9e15 594
YutaTogashi 0:4092428e9e15 595 //残りを受信
YutaTogashi 0:4092428e9e15 596 int i = 1;
YutaTogashi 0:4092428e9e15 597 int cnt = (ary[0] == 0xBB) ? 2 : 1;
YutaTogashi 0:4092428e9e15 598 while(i < cnt && iface->readable()){
YutaTogashi 0:4092428e9e15 599 ary[i++] = iface->getc();
YutaTogashi 0:4092428e9e15 600 }
YutaTogashi 0:4092428e9e15 601
YutaTogashi 0:4092428e9e15 602 //レスポンスが0xBB以外:通信失敗
YutaTogashi 0:4092428e9e15 603 if(ary[0] != 0xBB){
YutaTogashi 0:4092428e9e15 604 lastLength = 2;
YutaTogashi 0:4092428e9e15 605 lastError = ary[1];
YutaTogashi 0:4092428e9e15 606 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 607 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 608 read_mark = true;
YutaTogashi 0:4092428e9e15 609 return -1;
YutaTogashi 0:4092428e9e15 610 }
YutaTogashi 0:4092428e9e15 611
YutaTogashi 0:4092428e9e15 612 lastLength = ary[1] + 2;
YutaTogashi 0:4092428e9e15 613
YutaTogashi 0:4092428e9e15 614 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 615 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 616 read_mark = true;
YutaTogashi 0:4092428e9e15 617
YutaTogashi 0:4092428e9e15 618 //通信成功時、取得データを返す
YutaTogashi 0:4092428e9e15 619 return ary[2];
YutaTogashi 0:4092428e9e15 620 }
YutaTogashi 0:4092428e9e15 621
YutaTogashi 0:4092428e9e15 622 /* ==================================================================
YutaTogashi 0:4092428e9e15 623 * <UART>
YutaTogashi 0:4092428e9e15 624 * レジスタの内容を読み取り(複数可)
YutaTogashi 0:4092428e9e15 625 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 626 * returns:
YutaTogashi 0:4092428e9e15 627 * -1 失敗
YutaTogashi 0:4092428e9e15 628 * -2 返答バイト不一致
YutaTogashi 0:4092428e9e15 629 * -4 レスポンスエラー
YutaTogashi 0:4092428e9e15 630 * それ以外 成功した際の戻り値バイト数
YutaTogashi 0:4092428e9e15 631 */
YutaTogashi 0:4092428e9e15 632 char BNO055_UART_CTRL::rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length){
YutaTogashi 0:4092428e9e15 633 //読み取りバイト数が1未満またはBNO055_UART_BUF_MAXLEN以上はバッファが足りないので読み取れない
YutaTogashi 0:4092428e9e15 634 if(length < 1 || length > BNO055_UART_BUF_MAXLEN) return -1;
YutaTogashi 0:4092428e9e15 635
YutaTogashi 0:4092428e9e15 636 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 637 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 638 wr(page1, BNO055_PAGE_ID, (isPage1) ? 1 : 0);
YutaTogashi 0:4092428e9e15 639 page1 = isPage1;
YutaTogashi 0:4092428e9e15 640 }
YutaTogashi 0:4092428e9e15 641
YutaTogashi 0:4092428e9e15 642 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 643 do{wait_ms(1);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 644
YutaTogashi 0:4092428e9e15 645 //コマンドをセット
YutaTogashi 0:4092428e9e15 646 ary[0] = 0xAA; //StartByte(固定)
YutaTogashi 0:4092428e9e15 647 ary[1] = 0x01; //読み取り
YutaTogashi 0:4092428e9e15 648 ary[2] = startRegAddr; //読み取り開始レジスタアドレス
YutaTogashi 0:4092428e9e15 649 ary[3] = length; //バイト長
YutaTogashi 0:4092428e9e15 650
YutaTogashi 0:4092428e9e15 651 //送信
YutaTogashi 0:4092428e9e15 652 iface->putc(ary[0]);
YutaTogashi 0:4092428e9e15 653 iface->putc(ary[1]);
YutaTogashi 0:4092428e9e15 654 iface->putc(ary[2]);
YutaTogashi 0:4092428e9e15 655 iface->putc(ary[3]);
YutaTogashi 0:4092428e9e15 656
YutaTogashi 0:4092428e9e15 657 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 658 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 659
YutaTogashi 0:4092428e9e15 660 lastError = 0;
YutaTogashi 0:4092428e9e15 661 memset(ary, 0, BNO055_UART_BUF_MAXLEN + 5); //配列ゼロクリア
YutaTogashi 0:4092428e9e15 662
YutaTogashi 0:4092428e9e15 663 ary[0] = rxd & 0xFF;
YutaTogashi 0:4092428e9e15 664
YutaTogashi 0:4092428e9e15 665 //残りを受信
YutaTogashi 0:4092428e9e15 666 int i = 1;
YutaTogashi 0:4092428e9e15 667 int cnt = (ary[0] == 0xBB) ? 2 : 1;
YutaTogashi 0:4092428e9e15 668 while(i < cnt && iface->readable()){
YutaTogashi 0:4092428e9e15 669 ary[i++] = iface->getc();
YutaTogashi 0:4092428e9e15 670 }
YutaTogashi 0:4092428e9e15 671
YutaTogashi 0:4092428e9e15 672 //レスポンスが0xBB以外:通信失敗
YutaTogashi 0:4092428e9e15 673 if(ary[0] != 0xBB){
YutaTogashi 0:4092428e9e15 674 lastLength = 2;
YutaTogashi 0:4092428e9e15 675 lastError = ary[1];
YutaTogashi 0:4092428e9e15 676 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 677 read_mark = true;
YutaTogashi 0:4092428e9e15 678 return -1;
YutaTogashi 0:4092428e9e15 679 }
YutaTogashi 0:4092428e9e15 680
YutaTogashi 0:4092428e9e15 681 //返答バイト長がlengthと一致しない:通信失敗
YutaTogashi 0:4092428e9e15 682 if(ary[1] != length){
YutaTogashi 0:4092428e9e15 683 lastLength = ary[1];
YutaTogashi 0:4092428e9e15 684 lastError = 0;
YutaTogashi 0:4092428e9e15 685 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 686 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 687 read_mark = true;
YutaTogashi 0:4092428e9e15 688 return -2;
YutaTogashi 0:4092428e9e15 689 }
YutaTogashi 0:4092428e9e15 690
YutaTogashi 0:4092428e9e15 691 lastLength = ary[1] + 2;
YutaTogashi 0:4092428e9e15 692
YutaTogashi 0:4092428e9e15 693 memcpy(receiveBytes, ary+2, ary[1]);
YutaTogashi 0:4092428e9e15 694
YutaTogashi 0:4092428e9e15 695 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 696 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 697 read_mark = true;
YutaTogashi 0:4092428e9e15 698
YutaTogashi 0:4092428e9e15 699 return ary[1];
YutaTogashi 0:4092428e9e15 700 }
YutaTogashi 0:4092428e9e15 701
YutaTogashi 0:4092428e9e15 702 /* ==================================================================
YutaTogashi 0:4092428e9e15 703 * <UART>
YutaTogashi 0:4092428e9e15 704 * レジスタ書き込み(1byteのみ)
YutaTogashi 0:4092428e9e15 705 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 706 * returns:
YutaTogashi 0:4092428e9e15 707 * -1 失敗
YutaTogashi 0:4092428e9e15 708 * 1 成功
YutaTogashi 0:4092428e9e15 709 */
YutaTogashi 0:4092428e9e15 710 char BNO055_UART_CTRL::wr(bool isPage1, char regAddr, char wBytes){
YutaTogashi 0:4092428e9e15 711 //ページが異なるならページ変更命令を発行(再帰処理)
YutaTogashi 0:4092428e9e15 712 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 713 wr(page1, BNO055_PAGE_ID, (isPage1) ? 1 : 0);
YutaTogashi 0:4092428e9e15 714 page1 = isPage1;
YutaTogashi 0:4092428e9e15 715 }
YutaTogashi 0:4092428e9e15 716
YutaTogashi 0:4092428e9e15 717 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 718 do{wait_ms(1);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 719
YutaTogashi 0:4092428e9e15 720 //コマンドをセット
YutaTogashi 0:4092428e9e15 721 ary[0] = 0xAA; //StartByte(固定)
YutaTogashi 0:4092428e9e15 722 ary[1] = 0x00; //書き込み
YutaTogashi 0:4092428e9e15 723 ary[2] = regAddr; //レジスタアドレス
YutaTogashi 0:4092428e9e15 724 ary[3] = 1; //バイト長
YutaTogashi 0:4092428e9e15 725 ary[4] = wBytes; //送信データ
YutaTogashi 0:4092428e9e15 726
YutaTogashi 0:4092428e9e15 727 //送信
YutaTogashi 0:4092428e9e15 728 iface->putc(ary[0]);
YutaTogashi 0:4092428e9e15 729 iface->putc(ary[1]);
YutaTogashi 0:4092428e9e15 730 iface->putc(ary[2]);
YutaTogashi 0:4092428e9e15 731 iface->putc(ary[3]);
YutaTogashi 0:4092428e9e15 732 iface->putc(ary[4]);
YutaTogashi 0:4092428e9e15 733
YutaTogashi 0:4092428e9e15 734 //システムリブートが発生するレジスタの場合は1200ms待つ
YutaTogashi 0:4092428e9e15 735 if(regAddr == 0x3F) wait_ms(1200);
YutaTogashi 0:4092428e9e15 736
YutaTogashi 0:4092428e9e15 737 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 738 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 739
YutaTogashi 0:4092428e9e15 740 lastError = 0;
YutaTogashi 0:4092428e9e15 741 memset(ary, 0, BNO055_UART_BUF_MAXLEN + 5); //配列ゼロクリア
YutaTogashi 0:4092428e9e15 742
YutaTogashi 0:4092428e9e15 743 ary[0] = rxd & 0xFF;
YutaTogashi 0:4092428e9e15 744
YutaTogashi 0:4092428e9e15 745 //残りを受信
YutaTogashi 0:4092428e9e15 746 while(iface->readable()){
YutaTogashi 0:4092428e9e15 747 ary[1] = iface->getc();
YutaTogashi 0:4092428e9e15 748 }
YutaTogashi 0:4092428e9e15 749
YutaTogashi 0:4092428e9e15 750 //レスポンスが0xEE以外もしくはステータスが0x01以外:書き込み失敗
YutaTogashi 0:4092428e9e15 751 if(ary[0] != 0xEE || ary[1] != 0x01){
YutaTogashi 0:4092428e9e15 752 lastLength = 2;
YutaTogashi 0:4092428e9e15 753 lastError = ary[1];
YutaTogashi 0:4092428e9e15 754 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 755 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 756 read_mark = true;
YutaTogashi 0:4092428e9e15 757 return -1;
YutaTogashi 0:4092428e9e15 758 }
YutaTogashi 0:4092428e9e15 759
YutaTogashi 0:4092428e9e15 760 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 761 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 762 read_mark = true;
YutaTogashi 0:4092428e9e15 763
YutaTogashi 0:4092428e9e15 764 return 1;
YutaTogashi 0:4092428e9e15 765 }
YutaTogashi 0:4092428e9e15 766
YutaTogashi 0:4092428e9e15 767 /* ==================================================================
YutaTogashi 0:4092428e9e15 768 * <UART>
YutaTogashi 0:4092428e9e15 769 * レジスタ書き込み(複数可)
YutaTogashi 0:4092428e9e15 770 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 771 * returns:
YutaTogashi 0:4092428e9e15 772 * -1 失敗
YutaTogashi 0:4092428e9e15 773 * -4 レスポンスエラー
YutaTogashi 0:4092428e9e15 774 * 1 成功
YutaTogashi 0:4092428e9e15 775 */
YutaTogashi 0:4092428e9e15 776 char BNO055_UART_CTRL::wrc(bool isPage1, char startRegAddr, char *Bytes, char length){
YutaTogashi 0:4092428e9e15 777 //書き込みバイト数が1未満またはBNO055_UART_BUF_MAXLEN以上はバッファが足りないので読み取れない
YutaTogashi 0:4092428e9e15 778 if(length < 1 || length > BNO055_UART_BUF_MAXLEN) return -1;
YutaTogashi 0:4092428e9e15 779
YutaTogashi 0:4092428e9e15 780 //ページが異なるならページ変更命令を発行(再帰処理)
YutaTogashi 0:4092428e9e15 781 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 782 wr(page1, BNO055_PAGE_ID, (isPage1) ? 1 : 0);
YutaTogashi 0:4092428e9e15 783 page1 = isPage1;
YutaTogashi 0:4092428e9e15 784 }
YutaTogashi 0:4092428e9e15 785
YutaTogashi 0:4092428e9e15 786 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 787 do{wait_ms(1);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 788
YutaTogashi 0:4092428e9e15 789 //コマンドをセット
YutaTogashi 0:4092428e9e15 790 ary[0] = 0xAA; //StartByte(固定)
YutaTogashi 0:4092428e9e15 791 ary[1] = 0x00; //書き込み
YutaTogashi 0:4092428e9e15 792 ary[2] = startRegAddr; //レジスタアドレス
YutaTogashi 0:4092428e9e15 793 ary[3] = length; //バイト長
YutaTogashi 0:4092428e9e15 794
YutaTogashi 0:4092428e9e15 795 //前部分送信
YutaTogashi 0:4092428e9e15 796 iface->putc(ary[0]);
YutaTogashi 0:4092428e9e15 797 iface->putc(ary[1]);
YutaTogashi 0:4092428e9e15 798 iface->putc(ary[2]);
YutaTogashi 0:4092428e9e15 799 iface->putc(ary[3]);
YutaTogashi 0:4092428e9e15 800
YutaTogashi 0:4092428e9e15 801 //データ内容送信
YutaTogashi 0:4092428e9e15 802 for(int cnt=0; cnt<length; cnt++){
YutaTogashi 0:4092428e9e15 803 iface->putc(Bytes[cnt]);
YutaTogashi 0:4092428e9e15 804 }
YutaTogashi 0:4092428e9e15 805
YutaTogashi 0:4092428e9e15 806 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 807 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 808
YutaTogashi 0:4092428e9e15 809 lastError = 0;
YutaTogashi 0:4092428e9e15 810 memset(ary, 0, BNO055_UART_BUF_MAXLEN + 5); //配列ゼロクリア
YutaTogashi 0:4092428e9e15 811
YutaTogashi 0:4092428e9e15 812 ary[0] = rxd & 0xFF;
YutaTogashi 0:4092428e9e15 813
YutaTogashi 0:4092428e9e15 814 //残りを受信
YutaTogashi 0:4092428e9e15 815 while(iface->readable()){
YutaTogashi 0:4092428e9e15 816 ary[1] = iface->getc();
YutaTogashi 0:4092428e9e15 817 }
YutaTogashi 0:4092428e9e15 818
YutaTogashi 0:4092428e9e15 819 //レスポンスが0xEE以外もしくはステータスが0x01以外:書き込み失敗
YutaTogashi 0:4092428e9e15 820 if(ary[0] != 0xEE || ary[1] != 0x01){
YutaTogashi 0:4092428e9e15 821 lastLength = 2;
YutaTogashi 0:4092428e9e15 822 lastError = ary[1];
YutaTogashi 0:4092428e9e15 823 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 824 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 825 read_mark = true;
YutaTogashi 0:4092428e9e15 826 return -1;
YutaTogashi 0:4092428e9e15 827 }
YutaTogashi 0:4092428e9e15 828
YutaTogashi 0:4092428e9e15 829 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 830 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 831 read_mark = true;
YutaTogashi 0:4092428e9e15 832
YutaTogashi 0:4092428e9e15 833 return 1;
YutaTogashi 0:4092428e9e15 834 }
YutaTogashi 0:4092428e9e15 835
YutaTogashi 0:4092428e9e15 836 /* ==================================================================
YutaTogashi 0:4092428e9e15 837 * <UART>
YutaTogashi 0:4092428e9e15 838 * インターフェース設定を初期化する
YutaTogashi 0:4092428e9e15 839 */
YutaTogashi 0:4092428e9e15 840 void BNO055_UART_CTRL::init(){
YutaTogashi 0:4092428e9e15 841 iface->format(); //8N1 = default
YutaTogashi 0:4092428e9e15 842 iface->baud(115200);
YutaTogashi 0:4092428e9e15 843 wait_ms(5);
YutaTogashi 0:4092428e9e15 844 iface->attach(this, &BNO055_UART_CTRL::rxInterrupt);
YutaTogashi 0:4092428e9e15 845
YutaTogashi 0:4092428e9e15 846 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 847 do{wait_ms(1);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 848
YutaTogashi 0:4092428e9e15 849 //UARTリセット時に0xFFがつく現象および前回送信時の残りがあるため同期がとれない
YutaTogashi 0:4092428e9e15 850 //複数回読み取りを行い、正しいレスポンス(0xBB)が返るまで送信
YutaTogashi 0:4092428e9e15 851 iface->putc(0x01); //dummy
YutaTogashi 0:4092428e9e15 852 iface->putc(0x01); //dummy
YutaTogashi 0:4092428e9e15 853 iface->putc(0x01); //dummy
YutaTogashi 0:4092428e9e15 854 iface->putc(0x01); //dummy
YutaTogashi 0:4092428e9e15 855
YutaTogashi 0:4092428e9e15 856 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 857 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 858
YutaTogashi 0:4092428e9e15 859 char rslt = rxd & 0xFF; //レスポンス
YutaTogashi 0:4092428e9e15 860
YutaTogashi 0:4092428e9e15 861 do{
YutaTogashi 0:4092428e9e15 862 //レスポンスが異常:残りの情報を無視
YutaTogashi 0:4092428e9e15 863 if(rslt != 0xBB){
YutaTogashi 0:4092428e9e15 864 while(iface->readable()){
YutaTogashi 0:4092428e9e15 865 iface->getc();
YutaTogashi 0:4092428e9e15 866 }
YutaTogashi 0:4092428e9e15 867 }
YutaTogashi 0:4092428e9e15 868
YutaTogashi 0:4092428e9e15 869 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 870 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 871 read_mark = true;
YutaTogashi 0:4092428e9e15 872
YutaTogashi 0:4092428e9e15 873 //送信可能になるまで待つ
YutaTogashi 0:4092428e9e15 874 do{wait_ms(5);}while(!iface->writeable());
YutaTogashi 0:4092428e9e15 875
YutaTogashi 0:4092428e9e15 876 iface->putc(0xAA); //START
YutaTogashi 0:4092428e9e15 877 iface->putc(0x01); //読み取り
YutaTogashi 0:4092428e9e15 878 iface->putc(0x07); //ページID
YutaTogashi 0:4092428e9e15 879 iface->putc(0x01); //length 1byte
YutaTogashi 0:4092428e9e15 880
YutaTogashi 0:4092428e9e15 881 //レスポンスを受信するまで待つ
YutaTogashi 0:4092428e9e15 882 while(read_mark) wait_us(100);
YutaTogashi 0:4092428e9e15 883
YutaTogashi 0:4092428e9e15 884 rslt = rxd & 0xFF; //レスポンス
YutaTogashi 0:4092428e9e15 885
YutaTogashi 0:4092428e9e15 886 }while(rslt != 0xBB);
YutaTogashi 0:4092428e9e15 887
YutaTogashi 0:4092428e9e15 888 //残りの情報を無視
YutaTogashi 0:4092428e9e15 889 while(iface->readable()){
YutaTogashi 0:4092428e9e15 890 iface->getc();
YutaTogashi 0:4092428e9e15 891 }
YutaTogashi 0:4092428e9e15 892
YutaTogashi 0:4092428e9e15 893 //受信用割り込みマークをリセット
YutaTogashi 0:4092428e9e15 894 rxd = 0xFFFF;
YutaTogashi 0:4092428e9e15 895 read_mark = true;
YutaTogashi 0:4092428e9e15 896 }
YutaTogashi 0:4092428e9e15 897
YutaTogashi 0:4092428e9e15 898
YutaTogashi 0:4092428e9e15 899
YutaTogashi 0:4092428e9e15 900
YutaTogashi 0:4092428e9e15 901
YutaTogashi 0:4092428e9e15 902
YutaTogashi 0:4092428e9e15 903
YutaTogashi 0:4092428e9e15 904
YutaTogashi 0:4092428e9e15 905 //CLASS:BNO055_I2C_CTRL//////////////////////////////////////////////
YutaTogashi 0:4092428e9e15 906 /* ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 907 * BNO055_CTRLクラス(インターフェース)を継承(実装)したクラス
YutaTogashi 0:4092428e9e15 908 * I2Cで命令を送受信するためのコントロール用クラス
YutaTogashi 0:4092428e9e15 909 */
YutaTogashi 0:4092428e9e15 910
YutaTogashi 0:4092428e9e15 911 /* ==================================================================
YutaTogashi 0:4092428e9e15 912 * BNO055をI2Cでコントロールするためのクラス:コンストラクタ
YutaTogashi 0:4092428e9e15 913 */
YutaTogashi 0:4092428e9e15 914 BNO055_I2C_CTRL::BNO055_I2C_CTRL(I2C* iic, char addr, unsigned int freq){
YutaTogashi 0:4092428e9e15 915 iface = iic;
YutaTogashi 0:4092428e9e15 916 i2c_writeAddr = addr << 1;
YutaTogashi 0:4092428e9e15 917 i2c_readAddr = i2c_writeAddr + 1;
YutaTogashi 0:4092428e9e15 918 i2c_freq = freq;
YutaTogashi 0:4092428e9e15 919 page1 = true;
YutaTogashi 0:4092428e9e15 920 ary = new char[2];
YutaTogashi 0:4092428e9e15 921 memset(ary, 0, 2);
YutaTogashi 0:4092428e9e15 922 lastError = 0;
YutaTogashi 0:4092428e9e15 923 }
YutaTogashi 0:4092428e9e15 924
YutaTogashi 0:4092428e9e15 925 /* ==================================================================
YutaTogashi 0:4092428e9e15 926 * BNO055をI2Cでコントロールするためのクラス:デストラクタ
YutaTogashi 0:4092428e9e15 927 */
YutaTogashi 0:4092428e9e15 928 BNO055_I2C_CTRL::~BNO055_I2C_CTRL(){
YutaTogashi 0:4092428e9e15 929 delete iface;
YutaTogashi 0:4092428e9e15 930 delete[] ary;
YutaTogashi 0:4092428e9e15 931 }
YutaTogashi 0:4092428e9e15 932
YutaTogashi 0:4092428e9e15 933 /* ==================================================================
YutaTogashi 0:4092428e9e15 934 * <I2C>
YutaTogashi 0:4092428e9e15 935 * レジスタの内容を読み取り(1byteのみ)
YutaTogashi 0:4092428e9e15 936 */
YutaTogashi 0:4092428e9e15 937 char BNO055_I2C_CTRL::rr(bool isPage1, char regAddr){
YutaTogashi 0:4092428e9e15 938 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 939 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 940 ary[0] = BNO055_PAGE_ID;
YutaTogashi 0:4092428e9e15 941 ary[1] = (isPage1) ? 1 : 0;
YutaTogashi 0:4092428e9e15 942 page1 = isPage1;
YutaTogashi 0:4092428e9e15 943 iface->write(i2c_writeAddr, ary, 2);
YutaTogashi 0:4092428e9e15 944 }
YutaTogashi 0:4092428e9e15 945
YutaTogashi 0:4092428e9e15 946 ary[0] = regAddr;
YutaTogashi 0:4092428e9e15 947 iface->write(i2c_writeAddr, ary, 1, true);
YutaTogashi 0:4092428e9e15 948 iface->read(i2c_readAddr, ary, 1, false);
YutaTogashi 0:4092428e9e15 949
YutaTogashi 0:4092428e9e15 950 return ary[0];
YutaTogashi 0:4092428e9e15 951 }
YutaTogashi 0:4092428e9e15 952
YutaTogashi 0:4092428e9e15 953 /* ==================================================================
YutaTogashi 0:4092428e9e15 954 * <I2C>
YutaTogashi 0:4092428e9e15 955 * レジスタの内容を読み取り(複数可)
YutaTogashi 0:4092428e9e15 956 */
YutaTogashi 0:4092428e9e15 957 char BNO055_I2C_CTRL::rrc(bool isPage1, char startRegAddr, char *receiveBytes, char length){
YutaTogashi 0:4092428e9e15 958 //読み取りバイト数が1未満
YutaTogashi 0:4092428e9e15 959 if(length < 1) return -1;
YutaTogashi 0:4092428e9e15 960
YutaTogashi 0:4092428e9e15 961 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 962 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 963 ary[0] = BNO055_PAGE_ID;
YutaTogashi 0:4092428e9e15 964 ary[1] = (isPage1) ? 1 : 0;
YutaTogashi 0:4092428e9e15 965 page1 = isPage1;
YutaTogashi 0:4092428e9e15 966 iface->write(i2c_writeAddr, ary, 2);
YutaTogashi 0:4092428e9e15 967 }
YutaTogashi 0:4092428e9e15 968
YutaTogashi 0:4092428e9e15 969 ary[0] = startRegAddr;
YutaTogashi 0:4092428e9e15 970 iface->write(i2c_writeAddr, ary, 1, true);
YutaTogashi 0:4092428e9e15 971 iface->read(i2c_readAddr, receiveBytes, length, false);
YutaTogashi 0:4092428e9e15 972
YutaTogashi 0:4092428e9e15 973 return receiveBytes[0];
YutaTogashi 0:4092428e9e15 974 }
YutaTogashi 0:4092428e9e15 975
YutaTogashi 0:4092428e9e15 976 /* ==================================================================
YutaTogashi 0:4092428e9e15 977 * <I2C>
YutaTogashi 0:4092428e9e15 978 * レジスタ書き込み(1byteのみ)
YutaTogashi 0:4092428e9e15 979 */
YutaTogashi 0:4092428e9e15 980 char BNO055_I2C_CTRL::wr(bool isPage1, char regAddr, char wBytes){
YutaTogashi 0:4092428e9e15 981 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 982 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 983 ary[0] = BNO055_PAGE_ID;
YutaTogashi 0:4092428e9e15 984 ary[1] = (isPage1) ? 1 : 0;
YutaTogashi 0:4092428e9e15 985 page1 = isPage1;
YutaTogashi 0:4092428e9e15 986 iface->write(i2c_writeAddr, ary, 2);
YutaTogashi 0:4092428e9e15 987 }
YutaTogashi 0:4092428e9e15 988
YutaTogashi 0:4092428e9e15 989 ary[0] = regAddr;
YutaTogashi 0:4092428e9e15 990 ary[1] = wBytes;
YutaTogashi 0:4092428e9e15 991
YutaTogashi 0:4092428e9e15 992 iface->write(i2c_writeAddr, ary, 2);
YutaTogashi 0:4092428e9e15 993
YutaTogashi 0:4092428e9e15 994 return ary[0];
YutaTogashi 0:4092428e9e15 995 }
YutaTogashi 0:4092428e9e15 996
YutaTogashi 0:4092428e9e15 997 /* ==================================================================
YutaTogashi 0:4092428e9e15 998 * <I2C>
YutaTogashi 0:4092428e9e15 999 * レジスタ書き込み(複数可)
YutaTogashi 0:4092428e9e15 1000 */
YutaTogashi 0:4092428e9e15 1001 char BNO055_I2C_CTRL::wrc(bool isPage1, char startRegAddr, char *Bytes, char length){
YutaTogashi 0:4092428e9e15 1002 //書き込みバイト数が1未満
YutaTogashi 0:4092428e9e15 1003 if(length < 1) return -1;
YutaTogashi 0:4092428e9e15 1004
YutaTogashi 0:4092428e9e15 1005 //ページが異なるならページ変更命令を発行
YutaTogashi 0:4092428e9e15 1006 if(page1 != isPage1){
YutaTogashi 0:4092428e9e15 1007 ary[0] = BNO055_PAGE_ID;
YutaTogashi 0:4092428e9e15 1008 ary[1] = (isPage1) ? 1 : 0;
YutaTogashi 0:4092428e9e15 1009 page1 = isPage1;
YutaTogashi 0:4092428e9e15 1010 iface->write(i2c_writeAddr, ary, 2);
YutaTogashi 0:4092428e9e15 1011 }
YutaTogashi 0:4092428e9e15 1012
YutaTogashi 0:4092428e9e15 1013 ary[0] = startRegAddr;
YutaTogashi 0:4092428e9e15 1014 iface->write(i2c_writeAddr, ary, 1, true);
YutaTogashi 0:4092428e9e15 1015 iface->write(i2c_writeAddr, Bytes, length, false);
YutaTogashi 0:4092428e9e15 1016
YutaTogashi 0:4092428e9e15 1017 return Bytes[0];
YutaTogashi 0:4092428e9e15 1018 }
YutaTogashi 0:4092428e9e15 1019
YutaTogashi 0:4092428e9e15 1020 /* ==================================================================
YutaTogashi 0:4092428e9e15 1021 * <I2C>
YutaTogashi 0:4092428e9e15 1022 * インターフェース設定を初期化する
YutaTogashi 0:4092428e9e15 1023 */
YutaTogashi 0:4092428e9e15 1024 void BNO055_I2C_CTRL::init(){
YutaTogashi 0:4092428e9e15 1025 iface->frequency(i2c_freq);
YutaTogashi 0:4092428e9e15 1026 wait_ms(5);
YutaTogashi 0:4092428e9e15 1027 }
YutaTogashi 0:4092428e9e15 1028
YutaTogashi 0:4092428e9e15 1029
YutaTogashi 0:4092428e9e15 1030
YutaTogashi 0:4092428e9e15 1031
YutaTogashi 0:4092428e9e15 1032
YutaTogashi 0:4092428e9e15 1033
YutaTogashi 0:4092428e9e15 1034
YutaTogashi 0:4092428e9e15 1035
YutaTogashi 0:4092428e9e15 1036
YutaTogashi 0:4092428e9e15 1037 //CLASS:BOARDC_BNO055////////////////////////////////////////////////
YutaTogashi 0:4092428e9e15 1038 /* ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1039 * メインクラス
YutaTogashi 0:4092428e9e15 1040 * BNO055をUARTまたはI2Cで使用するための命令をまとめている
YutaTogashi 0:4092428e9e15 1041 * 内部にBNO055_CTRLクラスのインスタンスを持ち、コンストラクタの引数によって
YutaTogashi 0:4092428e9e15 1042 * UARTとI2Cのどちらを使用するか決定する
YutaTogashi 0:4092428e9e15 1043 */
YutaTogashi 0:4092428e9e15 1044
YutaTogashi 0:4092428e9e15 1045 /* ==================================================================
YutaTogashi 0:4092428e9e15 1046 * コンストラクタ (オーバーロード+3)
YutaTogashi 0:4092428e9e15 1047 * UARTで使用する際のコンストラクタ:ピン別名を指定する
YutaTogashi 0:4092428e9e15 1048 */
YutaTogashi 0:4092428e9e15 1049 BOARDC_BNO055::BOARDC_BNO055(PinName tx, PinName rx){
YutaTogashi 0:4092428e9e15 1050 ctrl = new BNO055_UART_CTRL(new RawSerial(tx, rx));
YutaTogashi 0:4092428e9e15 1051
YutaTogashi 0:4092428e9e15 1052 scaleACC = 0.01f; // = 1 / 100
YutaTogashi 0:4092428e9e15 1053 scaleMAG = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1054 scaleGYRO = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1055 scaleEuler = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1056 scaleTEMP = 1.0f;
YutaTogashi 0:4092428e9e15 1057 scaleLIA = scaleACC;
YutaTogashi 0:4092428e9e15 1058 scaleGV = scaleACC;
YutaTogashi 0:4092428e9e15 1059 scaleQuaternion = 0.00006103515; // = 1 / (2^14)
YutaTogashi 0:4092428e9e15 1060
YutaTogashi 0:4092428e9e15 1061 clkExt = false;
YutaTogashi 0:4092428e9e15 1062 }
YutaTogashi 0:4092428e9e15 1063
YutaTogashi 0:4092428e9e15 1064 /* ==================================================================
YutaTogashi 0:4092428e9e15 1065 * コンストラクタ (オーバーロード+3)
YutaTogashi 0:4092428e9e15 1066 * UARTで使用する際のコンストラクタ:RawSerialクラスのインスタンスを指定する
YutaTogashi 0:4092428e9e15 1067 */
YutaTogashi 0:4092428e9e15 1068 BOARDC_BNO055::BOARDC_BNO055(RawSerial *uart){
YutaTogashi 0:4092428e9e15 1069 ctrl = new BNO055_UART_CTRL(uart);
YutaTogashi 0:4092428e9e15 1070
YutaTogashi 0:4092428e9e15 1071 scaleACC = 0.01f; // = 1 / 100
YutaTogashi 0:4092428e9e15 1072 scaleMAG = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1073 scaleGYRO = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1074 scaleEuler = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1075 scaleTEMP = 1.0f;
YutaTogashi 0:4092428e9e15 1076 scaleLIA = scaleACC;
YutaTogashi 0:4092428e9e15 1077 scaleGV = scaleACC;
YutaTogashi 0:4092428e9e15 1078 scaleQuaternion = 0.00006103515; // = 1 / (2^14)
YutaTogashi 0:4092428e9e15 1079
YutaTogashi 0:4092428e9e15 1080 clkExt = false;
YutaTogashi 0:4092428e9e15 1081 }
YutaTogashi 0:4092428e9e15 1082
YutaTogashi 0:4092428e9e15 1083 /* ==================================================================
YutaTogashi 0:4092428e9e15 1084 * コンストラクタ (オーバーロード+3)
YutaTogashi 0:4092428e9e15 1085 * I2Cで使用する際のコンストラクタ:ピン別名を指定する
YutaTogashi 0:4092428e9e15 1086 */
YutaTogashi 0:4092428e9e15 1087 BOARDC_BNO055::BOARDC_BNO055(PinName sda, PinName scl, char addr, unsigned int freq){
YutaTogashi 0:4092428e9e15 1088 ctrl = new BNO055_I2C_CTRL(new I2C(sda, scl), addr, freq);
YutaTogashi 0:4092428e9e15 1089
YutaTogashi 0:4092428e9e15 1090 scaleACC = 0.01f; // = 1 / 100
YutaTogashi 0:4092428e9e15 1091 scaleMAG = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1092 scaleGYRO = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1093 scaleEuler = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1094 scaleTEMP = 1.0f;
YutaTogashi 0:4092428e9e15 1095 scaleLIA = scaleACC;
YutaTogashi 0:4092428e9e15 1096 scaleGV = scaleACC;
YutaTogashi 0:4092428e9e15 1097 scaleQuaternion = 0.00006103515; // = 1 / (2^14)
YutaTogashi 0:4092428e9e15 1098
YutaTogashi 0:4092428e9e15 1099 clkExt = false;
YutaTogashi 0:4092428e9e15 1100 }
YutaTogashi 0:4092428e9e15 1101
YutaTogashi 0:4092428e9e15 1102 /* ==================================================================
YutaTogashi 0:4092428e9e15 1103 * コンストラクタ (オーバーロード+3)
YutaTogashi 0:4092428e9e15 1104 * I2Cで使用する際のコンストラクタ:I2Cクラスのインスタンスを指定する
YutaTogashi 0:4092428e9e15 1105 */
YutaTogashi 0:4092428e9e15 1106 BOARDC_BNO055::BOARDC_BNO055(I2C* iic, char addr, unsigned int freq){
YutaTogashi 0:4092428e9e15 1107 ctrl = new BNO055_I2C_CTRL(iic, addr, freq);
YutaTogashi 0:4092428e9e15 1108
YutaTogashi 0:4092428e9e15 1109 scaleACC = 0.01f; // = 1 / 100
YutaTogashi 0:4092428e9e15 1110 scaleMAG = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1111 scaleGYRO = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1112 scaleEuler = 0.0625f; // = 1 / 16
YutaTogashi 0:4092428e9e15 1113 scaleTEMP = 1.0f;
YutaTogashi 0:4092428e9e15 1114 scaleLIA = scaleACC;
YutaTogashi 0:4092428e9e15 1115 scaleGV = scaleACC;
YutaTogashi 0:4092428e9e15 1116 scaleQuaternion = 0.00006103515; // = 1 / (2^14)
YutaTogashi 0:4092428e9e15 1117
YutaTogashi 0:4092428e9e15 1118 clkExt = false;
YutaTogashi 0:4092428e9e15 1119 }
YutaTogashi 0:4092428e9e15 1120
YutaTogashi 0:4092428e9e15 1121 /* ==================================================================
YutaTogashi 0:4092428e9e15 1122 * デストラクタ
YutaTogashi 0:4092428e9e15 1123 */
YutaTogashi 0:4092428e9e15 1124 BOARDC_BNO055::~BOARDC_BNO055(){
YutaTogashi 0:4092428e9e15 1125 delete ctrl;
YutaTogashi 0:4092428e9e15 1126 }
YutaTogashi 0:4092428e9e15 1127
YutaTogashi 0:4092428e9e15 1128 /* ==================================================================
YutaTogashi 0:4092428e9e15 1129 * デフォルト設定での初期化
YutaTogashi 0:4092428e9e15 1130 */
YutaTogashi 0:4092428e9e15 1131 char BOARDC_BNO055::initialize(bool resetIface){
YutaTogashi 0:4092428e9e15 1132 if(resetIface) ctrl->init();
YutaTogashi 0:4092428e9e15 1133
YutaTogashi 0:4092428e9e15 1134 //CONFIGモードに設定
YutaTogashi 0:4092428e9e15 1135 setOperation_CONFIG();
YutaTogashi 0:4092428e9e15 1136
YutaTogashi 0:4092428e9e15 1137 //外部発振子設定,セルフテストの実行,セルフテスト完了まで待つ
YutaTogashi 0:4092428e9e15 1138 setSysTrigger(0x81);
YutaTogashi 0:4092428e9e15 1139
YutaTogashi 0:4092428e9e15 1140 //加速度センサーレンジ設定(+-8G)
YutaTogashi 0:4092428e9e15 1141 //地磁気や角速度センサーのレンジやバンドはFusionモードにより自動設定される
YutaTogashi 0:4092428e9e15 1142 if(!setAccRange(16)) return -1;
YutaTogashi 0:4092428e9e15 1143
YutaTogashi 0:4092428e9e15 1144 //各軸リマップ設定(BNO055の1pinマークが表側右下)
YutaTogashi 0:4092428e9e15 1145 if(!setAxisRemap_topview_bottomright()) return -2;
YutaTogashi 0:4092428e9e15 1146
YutaTogashi 0:4092428e9e15 1147 //単位系セット
YutaTogashi 0:4092428e9e15 1148 //ORI_Android_Windows : Windows
YutaTogashi 0:4092428e9e15 1149 //TEMP_Unit : Celcius
YutaTogashi 0:4092428e9e15 1150 //EUL_Unit : Degree
YutaTogashi 0:4092428e9e15 1151 //GYR_Unit : deg/s
YutaTogashi 0:4092428e9e15 1152 //ACC_Unit : m/s^2
YutaTogashi 0:4092428e9e15 1153 if(!setUNIT_SEL(0x00)) return -3;
YutaTogashi 0:4092428e9e15 1154
YutaTogashi 0:4092428e9e15 1155 //動作モード設定(9軸Fusionモード)
YutaTogashi 0:4092428e9e15 1156 if(!setOperation_Fusion_NDOF()) return -4;
YutaTogashi 0:4092428e9e15 1157
YutaTogashi 0:4092428e9e15 1158 return 0;
YutaTogashi 0:4092428e9e15 1159 }
YutaTogashi 0:4092428e9e15 1160
YutaTogashi 0:4092428e9e15 1161 /* ==================================================================
YutaTogashi 0:4092428e9e15 1162 * 通信で発生した最後のエラー番号を返す
YutaTogashi 0:4092428e9e15 1163 */
YutaTogashi 0:4092428e9e15 1164 char BOARDC_BNO055::getIfaceLastError(){
YutaTogashi 0:4092428e9e15 1165 return ctrl->getLastError();
YutaTogashi 0:4092428e9e15 1166 }
YutaTogashi 0:4092428e9e15 1167
YutaTogashi 0:4092428e9e15 1168 /* ==================================================================
YutaTogashi 0:4092428e9e15 1169 * 通信で発生した最後のエラーの通信バイト数を返す
YutaTogashi 0:4092428e9e15 1170 */
YutaTogashi 0:4092428e9e15 1171 char BOARDC_BNO055::getIfaceLastLength(){
YutaTogashi 0:4092428e9e15 1172 return ctrl->getLastLength();
YutaTogashi 0:4092428e9e15 1173 }
YutaTogashi 0:4092428e9e15 1174
YutaTogashi 0:4092428e9e15 1175 /* ==================================================================
YutaTogashi 0:4092428e9e15 1176 * ユーザー定義読み取り(1byte)
YutaTogashi 0:4092428e9e15 1177 * レジスタを指定して値を直接読み取る
YutaTogashi 0:4092428e9e15 1178 */
YutaTogashi 0:4092428e9e15 1179 char BOARDC_BNO055::customRead(bool isPage1, char regAddr){
YutaTogashi 0:4092428e9e15 1180 return ctrl->rr(isPage1, regAddr);
YutaTogashi 0:4092428e9e15 1181 }
YutaTogashi 0:4092428e9e15 1182
YutaTogashi 0:4092428e9e15 1183 /* ==================================================================
YutaTogashi 0:4092428e9e15 1184 * ユーザー定義読み取り(連続)
YutaTogashi 0:4092428e9e15 1185 * レジスタを指定して値を直接読み取る
YutaTogashi 0:4092428e9e15 1186 */
YutaTogashi 0:4092428e9e15 1187 char BOARDC_BNO055::customReadC(bool isPage1, char startRegAddr, char *receiveBytes, unsigned char length){
YutaTogashi 0:4092428e9e15 1188 return ctrl->rrc(isPage1, startRegAddr, receiveBytes, length);
YutaTogashi 0:4092428e9e15 1189 }
YutaTogashi 0:4092428e9e15 1190
YutaTogashi 0:4092428e9e15 1191 /* ==================================================================
YutaTogashi 0:4092428e9e15 1192 * ユーザー定義書き込み(1byte)
YutaTogashi 0:4092428e9e15 1193 * レジスタを指定して値を直接書き込む
YutaTogashi 0:4092428e9e15 1194 */
YutaTogashi 0:4092428e9e15 1195 char BOARDC_BNO055::customWrite(bool isPage1, char regAddr, char wBytes){
YutaTogashi 0:4092428e9e15 1196 return ctrl->wr(isPage1, regAddr, wBytes);
YutaTogashi 0:4092428e9e15 1197 }
YutaTogashi 0:4092428e9e15 1198
YutaTogashi 0:4092428e9e15 1199 /* ==================================================================
YutaTogashi 0:4092428e9e15 1200 * ユーザー定義書き込み(連続)
YutaTogashi 0:4092428e9e15 1201 * レジスタを指定して値を直接書き込む
YutaTogashi 0:4092428e9e15 1202 */
YutaTogashi 0:4092428e9e15 1203 char BOARDC_BNO055::customWriteC(bool isPage1, char startRegAddr, char *Bytes, unsigned char length){
YutaTogashi 0:4092428e9e15 1204 return ctrl->wrc(isPage1, startRegAddr, Bytes, length);
YutaTogashi 0:4092428e9e15 1205 }
YutaTogashi 0:4092428e9e15 1206
YutaTogashi 0:4092428e9e15 1207 /* ==================================================================
YutaTogashi 0:4092428e9e15 1208 * レジスタ:ページIDの現在値を読む
YutaTogashi 0:4092428e9e15 1209 * 実際はコントロールクラスが保持している内部変数の値を返しているだけ
YutaTogashi 0:4092428e9e15 1210 */
YutaTogashi 0:4092428e9e15 1211 char BOARDC_BNO055::getPage(){
YutaTogashi 0:4092428e9e15 1212 return ctrl->getNowPage();
YutaTogashi 0:4092428e9e15 1213 }
YutaTogashi 0:4092428e9e15 1214
YutaTogashi 0:4092428e9e15 1215 /* ==================================================================
YutaTogashi 0:4092428e9e15 1216 * レジスタ:ページIDを変更する
YutaTogashi 0:4092428e9e15 1217 * ページIDが現在値と同じであれば何もしない
YutaTogashi 0:4092428e9e15 1218 */
YutaTogashi 0:4092428e9e15 1219 void BOARDC_BNO055::setPage(unsigned char pageNo){
YutaTogashi 0:4092428e9e15 1220 pageNo = (pageNo == 0) ? 0 : 1;
YutaTogashi 0:4092428e9e15 1221 if(getPage() == pageNo) return;
YutaTogashi 0:4092428e9e15 1222 ctrl->wr((getPage() == 0) ? true : false, BNO055_PAGE_ID, pageNo);
YutaTogashi 0:4092428e9e15 1223 }
YutaTogashi 0:4092428e9e15 1224
YutaTogashi 0:4092428e9e15 1225 /* ==================================================================
YutaTogashi 0:4092428e9e15 1226 * レジスタ:チップIDの値を取得する
YutaTogashi 0:4092428e9e15 1227 */
YutaTogashi 0:4092428e9e15 1228 char BOARDC_BNO055::getChipID(){
YutaTogashi 0:4092428e9e15 1229 return ctrl->rr(0, BNO055P0_CHIP_ID);
YutaTogashi 0:4092428e9e15 1230 }
YutaTogashi 0:4092428e9e15 1231
YutaTogashi 0:4092428e9e15 1232 /* ==================================================================
YutaTogashi 0:4092428e9e15 1233 * レジスタ:加速度センサーIDの値を取得する
YutaTogashi 0:4092428e9e15 1234 */
YutaTogashi 0:4092428e9e15 1235 char BOARDC_BNO055::getAccChipID(){
YutaTogashi 0:4092428e9e15 1236 return ctrl->rr(0, BNO055P0_ACC_ID);
YutaTogashi 0:4092428e9e15 1237 }
YutaTogashi 0:4092428e9e15 1238
YutaTogashi 0:4092428e9e15 1239 /* ==================================================================
YutaTogashi 0:4092428e9e15 1240 * レジスタ:地磁気センサーIDの値を取得する
YutaTogashi 0:4092428e9e15 1241 */
YutaTogashi 0:4092428e9e15 1242 char BOARDC_BNO055::getMagChipID(){
YutaTogashi 0:4092428e9e15 1243 return ctrl->rr(0, BNO055P0_MAG_ID);
YutaTogashi 0:4092428e9e15 1244 }
YutaTogashi 0:4092428e9e15 1245
YutaTogashi 0:4092428e9e15 1246 /* ==================================================================
YutaTogashi 0:4092428e9e15 1247 * レジスタ:ジャイロセンサーIDの値を取得する
YutaTogashi 0:4092428e9e15 1248 */
YutaTogashi 0:4092428e9e15 1249 char BOARDC_BNO055::getGyroChipID(){
YutaTogashi 0:4092428e9e15 1250 return ctrl->rr(0, BNO055P0_GYR_ID);
YutaTogashi 0:4092428e9e15 1251 }
YutaTogashi 0:4092428e9e15 1252
YutaTogashi 0:4092428e9e15 1253 /* ==================================================================
YutaTogashi 0:4092428e9e15 1254 * レジスタ:内部ソフトウェアリビジョンの値を取得する
YutaTogashi 0:4092428e9e15 1255 */
YutaTogashi 0:4092428e9e15 1256 short BOARDC_BNO055::getRevision(){
YutaTogashi 0:4092428e9e15 1257 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1258 char rsv[2];
YutaTogashi 0:4092428e9e15 1259 ctrl->rrc(0, BNO055P0_SW_REV_ID_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1260
YutaTogashi 0:4092428e9e15 1261 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1262 }
YutaTogashi 0:4092428e9e15 1263
YutaTogashi 0:4092428e9e15 1264 /* ==================================================================
YutaTogashi 0:4092428e9e15 1265 * レジスタ:内部ブートリビジョンの値を取得する
YutaTogashi 0:4092428e9e15 1266 */
YutaTogashi 0:4092428e9e15 1267 char BOARDC_BNO055::getBootRevision(){
YutaTogashi 0:4092428e9e15 1268 return ctrl->rr(0, BNO055P0_BL_REV_ID);
YutaTogashi 0:4092428e9e15 1269 }
YutaTogashi 0:4092428e9e15 1270
YutaTogashi 0:4092428e9e15 1271 /* ==================================================================
YutaTogashi 0:4092428e9e15 1272 * 加速度センサーのRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1273 */
YutaTogashi 0:4092428e9e15 1274 float BOARDC_BNO055::getAccScale(){
YutaTogashi 0:4092428e9e15 1275 return scaleACC;
YutaTogashi 0:4092428e9e15 1276 }
YutaTogashi 0:4092428e9e15 1277
YutaTogashi 0:4092428e9e15 1278 /* ==================================================================
YutaTogashi 0:4092428e9e15 1279 * 地磁気センサーのRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1280 */
YutaTogashi 0:4092428e9e15 1281 float BOARDC_BNO055::getMagScale(){
YutaTogashi 0:4092428e9e15 1282 return scaleMAG;
YutaTogashi 0:4092428e9e15 1283 }
YutaTogashi 0:4092428e9e15 1284
YutaTogashi 0:4092428e9e15 1285 /* ==================================================================
YutaTogashi 0:4092428e9e15 1286 * 角速度センサーのRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1287 */
YutaTogashi 0:4092428e9e15 1288 float BOARDC_BNO055::getGyroScale(){
YutaTogashi 0:4092428e9e15 1289 return scaleGYRO;
YutaTogashi 0:4092428e9e15 1290 }
YutaTogashi 0:4092428e9e15 1291
YutaTogashi 0:4092428e9e15 1292 /* ==================================================================
YutaTogashi 0:4092428e9e15 1293 * 温度センサーのRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1294 */
YutaTogashi 0:4092428e9e15 1295 float BOARDC_BNO055::getTempScale(){
YutaTogashi 0:4092428e9e15 1296 return scaleTEMP;
YutaTogashi 0:4092428e9e15 1297 }
YutaTogashi 0:4092428e9e15 1298
YutaTogashi 0:4092428e9e15 1299 /* ==================================================================
YutaTogashi 0:4092428e9e15 1300 * オイラー角のRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1301 */
YutaTogashi 0:4092428e9e15 1302 float BOARDC_BNO055::getEulerScale(){
YutaTogashi 0:4092428e9e15 1303 return scaleEuler;
YutaTogashi 0:4092428e9e15 1304 }
YutaTogashi 0:4092428e9e15 1305
YutaTogashi 0:4092428e9e15 1306 /* ==================================================================
YutaTogashi 0:4092428e9e15 1307 * 加速度センサーの線形加速度のRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1308 */
YutaTogashi 0:4092428e9e15 1309 float BOARDC_BNO055::getLinearScale(){
YutaTogashi 0:4092428e9e15 1310 return scaleLIA;
YutaTogashi 0:4092428e9e15 1311 }
YutaTogashi 0:4092428e9e15 1312
YutaTogashi 0:4092428e9e15 1313 /* ==================================================================
YutaTogashi 0:4092428e9e15 1314 * 重力ベクトルのRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1315 */
YutaTogashi 0:4092428e9e15 1316 float BOARDC_BNO055::getGVScale(){
YutaTogashi 0:4092428e9e15 1317 return scaleGV;
YutaTogashi 0:4092428e9e15 1318 }
YutaTogashi 0:4092428e9e15 1319
YutaTogashi 0:4092428e9e15 1320 /* ==================================================================
YutaTogashi 0:4092428e9e15 1321 * 四元数のRAW値に乗算する係数を取得する
YutaTogashi 0:4092428e9e15 1322 */
YutaTogashi 0:4092428e9e15 1323 double BOARDC_BNO055::getQuaternionScale(){
YutaTogashi 0:4092428e9e15 1324 return scaleQuaternion;
YutaTogashi 0:4092428e9e15 1325 }
YutaTogashi 0:4092428e9e15 1326
YutaTogashi 0:4092428e9e15 1327
YutaTogashi 0:4092428e9e15 1328 /* ==================================================================
YutaTogashi 0:4092428e9e15 1329 * 加速度センサの値を取得する
YutaTogashi 0:4092428e9e15 1330 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1331 * &accX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
YutaTogashi 0:4092428e9e15 1332 * &accY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
YutaTogashi 0:4092428e9e15 1333 * &accZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
YutaTogashi 0:4092428e9e15 1334 */
YutaTogashi 0:4092428e9e15 1335 void BOARDC_BNO055::getAccDataAll(short &accX, short &accY, short &accZ){
YutaTogashi 0:4092428e9e15 1336 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1337 char rsv[6];
YutaTogashi 0:4092428e9e15 1338 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1339
YutaTogashi 0:4092428e9e15 1340 accX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1341 accY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1342 accZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1343 }
YutaTogashi 0:4092428e9e15 1344
YutaTogashi 0:4092428e9e15 1345 /* ==================================================================
YutaTogashi 0:4092428e9e15 1346 * 加速度センサの値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1347 */
YutaTogashi 0:4092428e9e15 1348 short BOARDC_BNO055::getAccDataX(){
YutaTogashi 0:4092428e9e15 1349 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1350 char rsv[2];
YutaTogashi 0:4092428e9e15 1351 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1352
YutaTogashi 0:4092428e9e15 1353 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1354 }
YutaTogashi 0:4092428e9e15 1355
YutaTogashi 0:4092428e9e15 1356 /* ==================================================================
YutaTogashi 0:4092428e9e15 1357 * 加速度センサの値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1358 */
YutaTogashi 0:4092428e9e15 1359 short BOARDC_BNO055::getAccDataY(){
YutaTogashi 0:4092428e9e15 1360 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1361 char rsv[2];
YutaTogashi 0:4092428e9e15 1362 ctrl->rrc(0, BNO055P0_ACC_DATA_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1363
YutaTogashi 0:4092428e9e15 1364 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1365 }
YutaTogashi 0:4092428e9e15 1366
YutaTogashi 0:4092428e9e15 1367 /* ==================================================================
YutaTogashi 0:4092428e9e15 1368 * 加速度センサの値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1369 */
YutaTogashi 0:4092428e9e15 1370 short BOARDC_BNO055::getAccDataZ(){
YutaTogashi 0:4092428e9e15 1371 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1372 char rsv[2];
YutaTogashi 0:4092428e9e15 1373 ctrl->rrc(0, BNO055P0_ACC_DATA_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1374
YutaTogashi 0:4092428e9e15 1375 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1376 }
YutaTogashi 0:4092428e9e15 1377
YutaTogashi 0:4092428e9e15 1378 /* ==================================================================
YutaTogashi 0:4092428e9e15 1379 * 地磁気センサの値を取得する
YutaTogashi 0:4092428e9e15 1380 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1381 * &magX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
YutaTogashi 0:4092428e9e15 1382 * &magY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
YutaTogashi 0:4092428e9e15 1383 * &magZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
YutaTogashi 0:4092428e9e15 1384 */
YutaTogashi 0:4092428e9e15 1385 void BOARDC_BNO055::getMagDataAll(short &magX, short &magY, short &magZ){
YutaTogashi 0:4092428e9e15 1386 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1387 char rsv[6];
YutaTogashi 0:4092428e9e15 1388 ctrl->rrc(0, BNO055P0_MAG_DATA_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1389
YutaTogashi 0:4092428e9e15 1390 magX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1391 magY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1392 magZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1393 }
YutaTogashi 0:4092428e9e15 1394
YutaTogashi 0:4092428e9e15 1395 /* ==================================================================
YutaTogashi 0:4092428e9e15 1396 * 地磁気センサの値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1397 */
YutaTogashi 0:4092428e9e15 1398 short BOARDC_BNO055::getMagDataX(){
YutaTogashi 0:4092428e9e15 1399 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1400 char rsv[2];
YutaTogashi 0:4092428e9e15 1401 ctrl->rrc(0, BNO055P0_MAG_DATA_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1402
YutaTogashi 0:4092428e9e15 1403 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1404 }
YutaTogashi 0:4092428e9e15 1405
YutaTogashi 0:4092428e9e15 1406 /* ==================================================================
YutaTogashi 0:4092428e9e15 1407 * 地磁気センサの値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1408 */
YutaTogashi 0:4092428e9e15 1409 short BOARDC_BNO055::getMagDataY(){
YutaTogashi 0:4092428e9e15 1410 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1411 char rsv[2];
YutaTogashi 0:4092428e9e15 1412 ctrl->rrc(0, BNO055P0_MAG_DATA_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1413
YutaTogashi 0:4092428e9e15 1414 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1415 }
YutaTogashi 0:4092428e9e15 1416
YutaTogashi 0:4092428e9e15 1417 /* ==================================================================
YutaTogashi 0:4092428e9e15 1418 * 地磁気センサの値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1419 */
YutaTogashi 0:4092428e9e15 1420 short BOARDC_BNO055::getMagDataZ(){
YutaTogashi 0:4092428e9e15 1421 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1422 char rsv[2];
YutaTogashi 0:4092428e9e15 1423 ctrl->rrc(0, BNO055P0_MAG_DATA_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1424
YutaTogashi 0:4092428e9e15 1425 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1426 }
YutaTogashi 0:4092428e9e15 1427
YutaTogashi 0:4092428e9e15 1428 /* ==================================================================
YutaTogashi 0:4092428e9e15 1429 * ジャイロセンサの値を取得する
YutaTogashi 0:4092428e9e15 1430 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1431 * &gyroX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
YutaTogashi 0:4092428e9e15 1432 * &gyroY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
YutaTogashi 0:4092428e9e15 1433 * &gyroZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
YutaTogashi 0:4092428e9e15 1434 */
YutaTogashi 0:4092428e9e15 1435 void BOARDC_BNO055::getGyroDataAll(short &gyroX, short &gyroY, short &gyroZ){
YutaTogashi 0:4092428e9e15 1436 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1437 char rsv[6];
YutaTogashi 0:4092428e9e15 1438 ctrl->rrc(0, BNO055P0_GYR_DATA_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1439
YutaTogashi 0:4092428e9e15 1440 gyroX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1441 gyroY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1442 gyroZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1443 }
YutaTogashi 0:4092428e9e15 1444
YutaTogashi 0:4092428e9e15 1445 /* ==================================================================
YutaTogashi 0:4092428e9e15 1446 * ジャイロセンサの値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1447 */
YutaTogashi 0:4092428e9e15 1448 short BOARDC_BNO055::getGyroDataX(){
YutaTogashi 0:4092428e9e15 1449 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1450 char rsv[2];
YutaTogashi 0:4092428e9e15 1451 ctrl->rrc(0, BNO055P0_GYR_DATA_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1452
YutaTogashi 0:4092428e9e15 1453 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1454 }
YutaTogashi 0:4092428e9e15 1455
YutaTogashi 0:4092428e9e15 1456 /* ==================================================================
YutaTogashi 0:4092428e9e15 1457 * ジャイロセンサの値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1458 */
YutaTogashi 0:4092428e9e15 1459 short BOARDC_BNO055::getGyroDataY(){
YutaTogashi 0:4092428e9e15 1460 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1461 char rsv[2];
YutaTogashi 0:4092428e9e15 1462 ctrl->rrc(0, BNO055P0_GYR_DATA_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1463
YutaTogashi 0:4092428e9e15 1464 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1465 }
YutaTogashi 0:4092428e9e15 1466
YutaTogashi 0:4092428e9e15 1467 /* ==================================================================
YutaTogashi 0:4092428e9e15 1468 * ジャイロセンサの値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1469 */
YutaTogashi 0:4092428e9e15 1470 short BOARDC_BNO055::getGyroDataZ(){
YutaTogashi 0:4092428e9e15 1471 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1472 char rsv[2];
YutaTogashi 0:4092428e9e15 1473 ctrl->rrc(0, BNO055P0_GYR_DATA_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1474
YutaTogashi 0:4092428e9e15 1475 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1476 }
YutaTogashi 0:4092428e9e15 1477
YutaTogashi 0:4092428e9e15 1478 /* ==================================================================
YutaTogashi 0:4092428e9e15 1479 * FusionSensing:オイラー角の値を取得する
YutaTogashi 0:4092428e9e15 1480 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1481 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1482 * &E_heading: アドレス参照引数:関数実行後、この変数にYaw軸(heading)の値が格納される
YutaTogashi 0:4092428e9e15 1483 * &E_roll: アドレス参照引数:関数実行後、この変数にroll軸の値が格納される
YutaTogashi 0:4092428e9e15 1484 * &E_pitch: アドレス参照引数:関数実行後、この変数にpitch軸の値が格納される
YutaTogashi 0:4092428e9e15 1485 */
YutaTogashi 0:4092428e9e15 1486 void BOARDC_BNO055::getEulerDataAll(short &E_heading, short &E_roll, short &E_pitch){
YutaTogashi 0:4092428e9e15 1487 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1488 char rsv[6];
YutaTogashi 0:4092428e9e15 1489 ctrl->rrc(0, BNO055P0_EUL_HEADING_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1490
YutaTogashi 0:4092428e9e15 1491 E_heading = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1492 E_roll = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1493 E_pitch = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1494 }
YutaTogashi 0:4092428e9e15 1495
YutaTogashi 0:4092428e9e15 1496 /* ==================================================================
YutaTogashi 0:4092428e9e15 1497 * FusionSensing:オイラー角の値(Yaw軸(heading)のみ)を取得する
YutaTogashi 0:4092428e9e15 1498 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1499 */
YutaTogashi 0:4092428e9e15 1500 short BOARDC_BNO055::getEulerDataHeading(){
YutaTogashi 0:4092428e9e15 1501 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1502 char rsv[2];
YutaTogashi 0:4092428e9e15 1503 ctrl->rrc(0, BNO055P0_EUL_HEADING_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1504
YutaTogashi 0:4092428e9e15 1505 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1506 }
YutaTogashi 0:4092428e9e15 1507
YutaTogashi 0:4092428e9e15 1508 /* ==================================================================
YutaTogashi 0:4092428e9e15 1509 * getEulerDataHeading()のエイリアス
YutaTogashi 0:4092428e9e15 1510 * FusionSensing:オイラー角の値(Yaw軸(heading)のみ)を返す
YutaTogashi 0:4092428e9e15 1511 */
YutaTogashi 0:4092428e9e15 1512 short BOARDC_BNO055::getEulerDataYaw(){
YutaTogashi 0:4092428e9e15 1513 return getEulerDataHeading();
YutaTogashi 0:4092428e9e15 1514 }
YutaTogashi 0:4092428e9e15 1515
YutaTogashi 0:4092428e9e15 1516 /* ==================================================================
YutaTogashi 0:4092428e9e15 1517 * FusionSensing:オイラー角の値(pitch軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1518 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1519 */
YutaTogashi 0:4092428e9e15 1520 short BOARDC_BNO055::getEulerDataRoll(){
YutaTogashi 0:4092428e9e15 1521 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1522 char rsv[2];
YutaTogashi 0:4092428e9e15 1523 ctrl->rrc(0, BNO055P0_EUL_ROLL_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1524
YutaTogashi 0:4092428e9e15 1525 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1526 }
YutaTogashi 0:4092428e9e15 1527
YutaTogashi 0:4092428e9e15 1528 /* ==================================================================
YutaTogashi 0:4092428e9e15 1529 * FusionSensing:オイラー角の値(pitch軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1530 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1531 */
YutaTogashi 0:4092428e9e15 1532 short BOARDC_BNO055::getEulerDataPitch(){
YutaTogashi 0:4092428e9e15 1533 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1534 char rsv[2];
YutaTogashi 0:4092428e9e15 1535 ctrl->rrc(0, BNO055P0_EUL_PITCH_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1536
YutaTogashi 0:4092428e9e15 1537 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1538 }
YutaTogashi 0:4092428e9e15 1539
YutaTogashi 0:4092428e9e15 1540 /* ==================================================================
YutaTogashi 0:4092428e9e15 1541 * FusionSensing:9軸センサーのすべての値の値を取得する
YutaTogashi 0:4092428e9e15 1542 */
YutaTogashi 0:4092428e9e15 1543 void BOARDC_BNO055::get9Axis(short *box){
YutaTogashi 0:4092428e9e15 1544 char rsv[18];
YutaTogashi 0:4092428e9e15 1545 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 18);
YutaTogashi 0:4092428e9e15 1546
YutaTogashi 0:4092428e9e15 1547 box[0] = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1548 box[1] = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1549 box[2] = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1550 box[3] = (rsv[7] << 8) | rsv[6];
YutaTogashi 0:4092428e9e15 1551 box[4] = (rsv[9] << 8) | rsv[8];
YutaTogashi 0:4092428e9e15 1552 box[5] = (rsv[11] << 8) | rsv[10];
YutaTogashi 0:4092428e9e15 1553 box[6] = (rsv[13] << 8) | rsv[12];
YutaTogashi 0:4092428e9e15 1554 box[7] = (rsv[15] << 8) | rsv[14];
YutaTogashi 0:4092428e9e15 1555 box[8] = (rsv[17] << 8) | rsv[16];
YutaTogashi 0:4092428e9e15 1556 }
YutaTogashi 0:4092428e9e15 1557
YutaTogashi 0:4092428e9e15 1558 /* ==================================================================
YutaTogashi 0:4092428e9e15 1559 * FusionSensing:9軸センサーのすべての値とオイラー角のすべての値を取得する
YutaTogashi 0:4092428e9e15 1560 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1561 */
YutaTogashi 0:4092428e9e15 1562 void BOARDC_BNO055::get9AxisAndEUL(short *box){
YutaTogashi 0:4092428e9e15 1563 char rsv[24];
YutaTogashi 0:4092428e9e15 1564 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 24);
YutaTogashi 0:4092428e9e15 1565
YutaTogashi 0:4092428e9e15 1566 box[0] = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1567 box[1] = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1568 box[2] = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1569 box[3] = (rsv[7] << 8) | rsv[6];
YutaTogashi 0:4092428e9e15 1570 box[4] = (rsv[9] << 8) | rsv[8];
YutaTogashi 0:4092428e9e15 1571 box[5] = (rsv[11] << 8) | rsv[10];
YutaTogashi 0:4092428e9e15 1572 box[6] = (rsv[13] << 8) | rsv[12];
YutaTogashi 0:4092428e9e15 1573 box[7] = (rsv[15] << 8) | rsv[14];
YutaTogashi 0:4092428e9e15 1574 box[8] = (rsv[17] << 8) | rsv[16];
YutaTogashi 0:4092428e9e15 1575 box[9] = (rsv[19] << 8) | rsv[18];
YutaTogashi 0:4092428e9e15 1576 box[10] = (rsv[21] << 8) | rsv[20];
YutaTogashi 0:4092428e9e15 1577 box[11] = (rsv[23] << 8) | rsv[22];
YutaTogashi 0:4092428e9e15 1578 }
YutaTogashi 0:4092428e9e15 1579
YutaTogashi 0:4092428e9e15 1580 /* ==================================================================
YutaTogashi 0:4092428e9e15 1581 * FusionSensing:四元数(Quaternion)を取得する
YutaTogashi 0:4092428e9e15 1582 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
YutaTogashi 0:4092428e9e15 1583 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1584 * &q1, &q2, &q3, &q4:アドレス参照引数:関数実行後、この変数に四元数が格納される
YutaTogashi 0:4092428e9e15 1585 */
YutaTogashi 0:4092428e9e15 1586 void BOARDC_BNO055::getQuaternion(short &q1, short &q2, short &q3, short &q4){
YutaTogashi 0:4092428e9e15 1587 //連続8byte読み取り
YutaTogashi 0:4092428e9e15 1588 char rsv[8];
YutaTogashi 0:4092428e9e15 1589 ctrl->rrc(0, BNO055P0_QUA_DATA_W_LSB, rsv, 8);
YutaTogashi 0:4092428e9e15 1590
YutaTogashi 0:4092428e9e15 1591 q1 = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1592 q2 = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1593 q3 = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1594 q4 = (rsv[7] << 8) | rsv[6];
YutaTogashi 0:4092428e9e15 1595 }
YutaTogashi 0:4092428e9e15 1596
YutaTogashi 0:4092428e9e15 1597 /* ==================================================================
YutaTogashi 0:4092428e9e15 1598 * 線形加速度(LinearAcceleration)での加速度センサの値を取得する
YutaTogashi 0:4092428e9e15 1599 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1600 * &L_accX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
YutaTogashi 0:4092428e9e15 1601 * &L_accY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
YutaTogashi 0:4092428e9e15 1602 * &L_accZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
YutaTogashi 0:4092428e9e15 1603 */
YutaTogashi 0:4092428e9e15 1604 void BOARDC_BNO055::getLinearAccDataAll(short &L_accX, short &L_accY, short &L_accZ){
YutaTogashi 0:4092428e9e15 1605 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1606 char rsv[6];
YutaTogashi 0:4092428e9e15 1607 ctrl->rrc(0, BNO055P0_LIA_DATA_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1608
YutaTogashi 0:4092428e9e15 1609 L_accX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1610 L_accY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1611 L_accZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1612 }
YutaTogashi 0:4092428e9e15 1613
YutaTogashi 0:4092428e9e15 1614 /* ==================================================================
YutaTogashi 0:4092428e9e15 1615 * 線形加速度(LinearAcceleration)での加速度センサの値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1616 */
YutaTogashi 0:4092428e9e15 1617 short BOARDC_BNO055::getLinearAccDataX(){
YutaTogashi 0:4092428e9e15 1618 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1619 char rsv[2];
YutaTogashi 0:4092428e9e15 1620 ctrl->rrc(0, BNO055P0_LIA_DATA_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1621
YutaTogashi 0:4092428e9e15 1622 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1623 }
YutaTogashi 0:4092428e9e15 1624
YutaTogashi 0:4092428e9e15 1625 /* ==================================================================
YutaTogashi 0:4092428e9e15 1626 * 線形加速度(LinearAcceleration)での加速度センサの値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1627 */
YutaTogashi 0:4092428e9e15 1628 short BOARDC_BNO055::getLinearAccDataY(){
YutaTogashi 0:4092428e9e15 1629 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1630 char rsv[2];
YutaTogashi 0:4092428e9e15 1631 ctrl->rrc(0, BNO055P0_LIA_DATA_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1632
YutaTogashi 0:4092428e9e15 1633 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1634 }
YutaTogashi 0:4092428e9e15 1635
YutaTogashi 0:4092428e9e15 1636 /* ==================================================================
YutaTogashi 0:4092428e9e15 1637 * 線形加速度(LinearAcceleration)での加速度センサの値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1638 */
YutaTogashi 0:4092428e9e15 1639 short BOARDC_BNO055::getLinearAccDataZ(){
YutaTogashi 0:4092428e9e15 1640 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1641 char rsv[2];
YutaTogashi 0:4092428e9e15 1642 ctrl->rrc(0, BNO055P0_LIA_DATA_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1643
YutaTogashi 0:4092428e9e15 1644 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1645 }
YutaTogashi 0:4092428e9e15 1646
YutaTogashi 0:4092428e9e15 1647 /* ==================================================================
YutaTogashi 0:4092428e9e15 1648 * 重力ベクトル情報を取得する
YutaTogashi 0:4092428e9e15 1649 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1650 * &gvX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
YutaTogashi 0:4092428e9e15 1651 * &gvY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
YutaTogashi 0:4092428e9e15 1652 * &gvZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
YutaTogashi 0:4092428e9e15 1653 */
YutaTogashi 0:4092428e9e15 1654 void BOARDC_BNO055::getGVectorDataAll(short &gvX, short &gvY, short &gvZ){
YutaTogashi 0:4092428e9e15 1655 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 1656 char rsv[6];
YutaTogashi 0:4092428e9e15 1657 ctrl->rrc(0, BNO055P0_GRV_DATA_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 1658
YutaTogashi 0:4092428e9e15 1659 gvX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1660 gvY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 1661 gvZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 1662 }
YutaTogashi 0:4092428e9e15 1663
YutaTogashi 0:4092428e9e15 1664 /* ==================================================================
YutaTogashi 0:4092428e9e15 1665 * 重力ベクトル情報(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1666 */
YutaTogashi 0:4092428e9e15 1667 short BOARDC_BNO055::getGVectorDataX(){
YutaTogashi 0:4092428e9e15 1668 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1669 char rsv[2];
YutaTogashi 0:4092428e9e15 1670 ctrl->rrc(0, BNO055P0_GRV_DATA_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1671
YutaTogashi 0:4092428e9e15 1672 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1673 }
YutaTogashi 0:4092428e9e15 1674
YutaTogashi 0:4092428e9e15 1675 /* ==================================================================
YutaTogashi 0:4092428e9e15 1676 * 重力ベクトル情報(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1677 */
YutaTogashi 0:4092428e9e15 1678 short BOARDC_BNO055::getGVectorDataY(){
YutaTogashi 0:4092428e9e15 1679 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1680 char rsv[2];
YutaTogashi 0:4092428e9e15 1681 ctrl->rrc(0, BNO055P0_GRV_DATA_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1682
YutaTogashi 0:4092428e9e15 1683 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1684 }
YutaTogashi 0:4092428e9e15 1685
YutaTogashi 0:4092428e9e15 1686 /* ==================================================================
YutaTogashi 0:4092428e9e15 1687 * 重力ベクトル情報(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 1688 */
YutaTogashi 0:4092428e9e15 1689 short BOARDC_BNO055::getGVectorDataZ(){
YutaTogashi 0:4092428e9e15 1690 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 1691 char rsv[2];
YutaTogashi 0:4092428e9e15 1692 ctrl->rrc(0, BNO055P0_GRV_DATA_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 1693
YutaTogashi 0:4092428e9e15 1694 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 1695 }
YutaTogashi 0:4092428e9e15 1696
YutaTogashi 0:4092428e9e15 1697 /* ==================================================================
YutaTogashi 0:4092428e9e15 1698 * センサー内部温度情報を取得する
YutaTogashi 0:4092428e9e15 1699 * 内部温度のセンサーは2つあり、どちらか一方のみの温度を返す
YutaTogashi 0:4092428e9e15 1700 * (設定レジスタTEMP_SOURCEにて選択可)
YutaTogashi 0:4092428e9e15 1701 * (setTempSource(bool)にて選択可)
YutaTogashi 0:4092428e9e15 1702 */
YutaTogashi 0:4092428e9e15 1703 char BOARDC_BNO055::getTemperature(){
YutaTogashi 0:4092428e9e15 1704 return ctrl->rr(0, BNO055P0_TEMP);
YutaTogashi 0:4092428e9e15 1705 }
YutaTogashi 0:4092428e9e15 1706
YutaTogashi 0:4092428e9e15 1707 /* ==================================================================
YutaTogashi 0:4092428e9e15 1708 * キャリブレーション(補正)の状態を取得する
YutaTogashi 0:4092428e9e15 1709 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1710 * &sys: アドレス参照引数:関数実行後、この変数にsystem補正の状態が格納される
YutaTogashi 0:4092428e9e15 1711 * &acc: アドレス参照引数:関数実行後、この変数に加速度センサー補正の状態が格納される
YutaTogashi 0:4092428e9e15 1712 * &mag: アドレス参照引数:関数実行後、この変数に地磁気センサー補正の状態が格納される
YutaTogashi 0:4092428e9e15 1713 * &gyro: アドレス参照引数:関数実行後、この変数に角速度センサー補正の状態が格納される
YutaTogashi 0:4092428e9e15 1714 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1715 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
YutaTogashi 0:4092428e9e15 1716 * 値は0[%],32[%],66[%],100[%]のいずれか
YutaTogashi 0:4092428e9e15 1717 */
YutaTogashi 0:4092428e9e15 1718 void BOARDC_BNO055::getCalibStatusAll(char &sys, char &acc, char &mag, char &gyro){
YutaTogashi 0:4092428e9e15 1719 char rv = ctrl->rr(0, BNO055P0_CALIB_STAT);
YutaTogashi 0:4092428e9e15 1720 sys = (((rv & 0xC0) >> 6) * 34);
YutaTogashi 0:4092428e9e15 1721 gyro = (((rv & 0x30) >> 4) * 34);
YutaTogashi 0:4092428e9e15 1722 acc = (((rv & 0x0C) >> 2) * 34);
YutaTogashi 0:4092428e9e15 1723 mag = ((rv & 0x03) * 34);
YutaTogashi 0:4092428e9e15 1724 sys -= (sys == 0) ? 0 : 2;
YutaTogashi 0:4092428e9e15 1725 gyro -= (gyro == 0) ? 0 : 2;
YutaTogashi 0:4092428e9e15 1726 acc -= (acc == 0) ? 0 : 2;
YutaTogashi 0:4092428e9e15 1727 mag -= (mag == 0) ? 0 : 2;
YutaTogashi 0:4092428e9e15 1728 }
YutaTogashi 0:4092428e9e15 1729
YutaTogashi 0:4092428e9e15 1730 /* ==================================================================
YutaTogashi 0:4092428e9e15 1731 * キャリブレーション(補正)の状態(systemのみ)を取得する
YutaTogashi 0:4092428e9e15 1732 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1733 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
YutaTogashi 0:4092428e9e15 1734 * 値は0[%],32[%],66[%],100[%]のいずれか
YutaTogashi 0:4092428e9e15 1735 */
YutaTogashi 0:4092428e9e15 1736 char BOARDC_BNO055::getCalibStatusSys(){
YutaTogashi 0:4092428e9e15 1737 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0xC0) >> 6) * 34) - 2;
YutaTogashi 0:4092428e9e15 1738 return (ret < 0) ? 0 : ret;
YutaTogashi 0:4092428e9e15 1739 }
YutaTogashi 0:4092428e9e15 1740
YutaTogashi 0:4092428e9e15 1741 /* ==================================================================
YutaTogashi 0:4092428e9e15 1742 * キャリブレーション(補正)の状態(加速度センサーのみ)を取得する
YutaTogashi 0:4092428e9e15 1743 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1744 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
YutaTogashi 0:4092428e9e15 1745 * 値は0[%],32[%],66[%],100[%]のいずれか
YutaTogashi 0:4092428e9e15 1746 */
YutaTogashi 0:4092428e9e15 1747 char BOARDC_BNO055::getCalibStatusAcc(){
YutaTogashi 0:4092428e9e15 1748 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x0C) >> 2) * 34) - 2;
YutaTogashi 0:4092428e9e15 1749 return (ret < 0) ? 0 : ret;
YutaTogashi 0:4092428e9e15 1750 }
YutaTogashi 0:4092428e9e15 1751
YutaTogashi 0:4092428e9e15 1752 /* ==================================================================
YutaTogashi 0:4092428e9e15 1753 * キャリブレーション(補正)の状態(地磁気センサーのみ)を取得する
YutaTogashi 0:4092428e9e15 1754 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1755 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
YutaTogashi 0:4092428e9e15 1756 * 値は0[%],32[%],66[%],100[%]のいずれか
YutaTogashi 0:4092428e9e15 1757 */
YutaTogashi 0:4092428e9e15 1758 char BOARDC_BNO055::getCalibStatusMag(){
YutaTogashi 0:4092428e9e15 1759 char ret = ((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x03) * 34) - 2;
YutaTogashi 0:4092428e9e15 1760 return (ret < 0) ? 0 : ret;
YutaTogashi 0:4092428e9e15 1761 }
YutaTogashi 0:4092428e9e15 1762
YutaTogashi 0:4092428e9e15 1763 /* ==================================================================
YutaTogashi 0:4092428e9e15 1764 * キャリブレーション(補正)の状態(角速度センサーのみ)を取得する
YutaTogashi 0:4092428e9e15 1765 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1766 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
YutaTogashi 0:4092428e9e15 1767 * 値は0[%],32[%],66[%],100[%]のいずれか
YutaTogashi 0:4092428e9e15 1768 */
YutaTogashi 0:4092428e9e15 1769 char BOARDC_BNO055::getCalibStatusGyro(){
YutaTogashi 0:4092428e9e15 1770 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x30) >> 4) * 34) - 2;
YutaTogashi 0:4092428e9e15 1771 return (ret < 0) ? 0 : ret;
YutaTogashi 0:4092428e9e15 1772 }
YutaTogashi 0:4092428e9e15 1773
YutaTogashi 0:4092428e9e15 1774 /* ==================================================================
YutaTogashi 0:4092428e9e15 1775 * システムおよびセンサーのセルフテストの実行結果を取得する
YutaTogashi 0:4092428e9e15 1776 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1777 * returns:
YutaTogashi 0:4092428e9e15 1778 * 1bit目:加速度センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
YutaTogashi 0:4092428e9e15 1779 * 2bit目:地磁気センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
YutaTogashi 0:4092428e9e15 1780 * 3bit目:角速度センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
YutaTogashi 0:4092428e9e15 1781 * 4bit目:内部マイコンのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
YutaTogashi 0:4092428e9e15 1782 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1783 * 例:戻り値 0x0D (0b00001101)
YutaTogashi 0:4092428e9e15 1784 * >>加速度センサー:正常(1)
YutaTogashi 0:4092428e9e15 1785 * >>地磁気センサー:異常(0)
YutaTogashi 0:4092428e9e15 1786 * >>角速度センサー:正常(1)
YutaTogashi 0:4092428e9e15 1787 * >>内部マイコン:正常(1)
YutaTogashi 0:4092428e9e15 1788 */
YutaTogashi 0:4092428e9e15 1789 char BOARDC_BNO055::getSelfTestResultAll(){
YutaTogashi 0:4092428e9e15 1790 return ctrl->rr(0, BNO055P0_ST_RESULT);
YutaTogashi 0:4092428e9e15 1791 }
YutaTogashi 0:4092428e9e15 1792
YutaTogashi 0:4092428e9e15 1793 /* ==================================================================
YutaTogashi 0:4092428e9e15 1794 * 内部マイコン(BNO055のMCU)のセルフテストの実行結果を取得する
YutaTogashi 0:4092428e9e15 1795 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1796 * returns:
YutaTogashi 0:4092428e9e15 1797 * false:failed(異常)
YutaTogashi 0:4092428e9e15 1798 * true:passed(正常)
YutaTogashi 0:4092428e9e15 1799 */
YutaTogashi 0:4092428e9e15 1800 bool BOARDC_BNO055::getSelfTestResultMCU(){
YutaTogashi 0:4092428e9e15 1801 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x08) >> 3) == 1);
YutaTogashi 0:4092428e9e15 1802 }
YutaTogashi 0:4092428e9e15 1803
YutaTogashi 0:4092428e9e15 1804 /* ==================================================================
YutaTogashi 0:4092428e9e15 1805 * 加速度センサーのセルフテストの実行結果を取得する
YutaTogashi 0:4092428e9e15 1806 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1807 * returns:
YutaTogashi 0:4092428e9e15 1808 * false:failed(異常)
YutaTogashi 0:4092428e9e15 1809 * true:passed(正常)
YutaTogashi 0:4092428e9e15 1810 */
YutaTogashi 0:4092428e9e15 1811 bool BOARDC_BNO055::getSelfTestResultAcc(){
YutaTogashi 0:4092428e9e15 1812 return ((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x01) == 1);
YutaTogashi 0:4092428e9e15 1813 }
YutaTogashi 0:4092428e9e15 1814
YutaTogashi 0:4092428e9e15 1815 /* ==================================================================
YutaTogashi 0:4092428e9e15 1816 * 地磁気センサーのセルフテストの実行結果を取得する
YutaTogashi 0:4092428e9e15 1817 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1818 * returns:
YutaTogashi 0:4092428e9e15 1819 * false:failed(異常)
YutaTogashi 0:4092428e9e15 1820 * true:passed(正常)
YutaTogashi 0:4092428e9e15 1821 */
YutaTogashi 0:4092428e9e15 1822 bool BOARDC_BNO055::getSelfTestResultMag(){
YutaTogashi 0:4092428e9e15 1823 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x02) >> 1) == 1);
YutaTogashi 0:4092428e9e15 1824 }
YutaTogashi 0:4092428e9e15 1825
YutaTogashi 0:4092428e9e15 1826 /* ==================================================================
YutaTogashi 0:4092428e9e15 1827 * 地磁気センサーのセルフテストの実行結果を取得する
YutaTogashi 0:4092428e9e15 1828 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1829 * returns:
YutaTogashi 0:4092428e9e15 1830 * false:failed(異常)
YutaTogashi 0:4092428e9e15 1831 * true:passed(正常)
YutaTogashi 0:4092428e9e15 1832 */
YutaTogashi 0:4092428e9e15 1833 bool BOARDC_BNO055::getSelfTestResultGyro(){
YutaTogashi 0:4092428e9e15 1834 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x04) >> 2) == 1);
YutaTogashi 0:4092428e9e15 1835 }
YutaTogashi 0:4092428e9e15 1836
YutaTogashi 0:4092428e9e15 1837 /* ==================================================================
YutaTogashi 0:4092428e9e15 1838 * 発生している割り込みステータス情報を取得する
YutaTogashi 0:4092428e9e15 1839 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1840 * returns:
YutaTogashi 0:4092428e9e15 1841 * 3bit目:GYRO_AM(角速度AnyMotion発生)(1:発生中, 0:なし)
YutaTogashi 0:4092428e9e15 1842 * 4bit目:GYR_HIGH_RATE(角速度ハイレート発生)(1:発生中, 0:なし)
YutaTogashi 0:4092428e9e15 1843 * 6bit目:ACC_HIGH_G(加速度急加速発生)(1:発生中, 0:なし)
YutaTogashi 0:4092428e9e15 1844 * 7bit目:ACC_AM(角速度AnyMotion発生)(1:発生中, 0:なし)
YutaTogashi 0:4092428e9e15 1845 * 8bit目:ACC_NM(角速度NoMotion発生)(1:発生中, 0:なし)
YutaTogashi 0:4092428e9e15 1846 */
YutaTogashi 0:4092428e9e15 1847 char BOARDC_BNO055::triggeredIntALL(){
YutaTogashi 0:4092428e9e15 1848 return ctrl->rr(0, BNO055P0_INT_STA);
YutaTogashi 0:4092428e9e15 1849 }
YutaTogashi 0:4092428e9e15 1850
YutaTogashi 0:4092428e9e15 1851 /* ==================================================================
YutaTogashi 0:4092428e9e15 1852 * 発生している割り込みステータス情報(ACC_NM)を取得する
YutaTogashi 0:4092428e9e15 1853 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1854 * returns:
YutaTogashi 0:4092428e9e15 1855 * true:ACC_NMトリガー発生中
YutaTogashi 0:4092428e9e15 1856 * false:ACC_NMトリガーなし
YutaTogashi 0:4092428e9e15 1857 */
YutaTogashi 0:4092428e9e15 1858 bool BOARDC_BNO055::triggeredACC_NM(){
YutaTogashi 0:4092428e9e15 1859 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x80) >> 7) == 1);
YutaTogashi 0:4092428e9e15 1860 }
YutaTogashi 0:4092428e9e15 1861
YutaTogashi 0:4092428e9e15 1862 /* ==================================================================
YutaTogashi 0:4092428e9e15 1863 * 発生している割り込みステータス情報(ACC_AM)を取得する
YutaTogashi 0:4092428e9e15 1864 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1865 * returns:
YutaTogashi 0:4092428e9e15 1866 * true:ACC_AMトリガー発生中
YutaTogashi 0:4092428e9e15 1867 * false:ACC_AMトリガーなし
YutaTogashi 0:4092428e9e15 1868 */
YutaTogashi 0:4092428e9e15 1869 bool BOARDC_BNO055::triggeredACC_AM(){
YutaTogashi 0:4092428e9e15 1870 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x40) >> 6) == 1);
YutaTogashi 0:4092428e9e15 1871 }
YutaTogashi 0:4092428e9e15 1872
YutaTogashi 0:4092428e9e15 1873 /* ==================================================================
YutaTogashi 0:4092428e9e15 1874 * 発生している割り込みステータス情報(ACC_HIGH_G)を取得する
YutaTogashi 0:4092428e9e15 1875 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1876 * returns:
YutaTogashi 0:4092428e9e15 1877 * true:ACC_HIGH_Gトリガー発生中
YutaTogashi 0:4092428e9e15 1878 * false:ACC_HIGH_Gトリガーなし
YutaTogashi 0:4092428e9e15 1879 */
YutaTogashi 0:4092428e9e15 1880 bool BOARDC_BNO055::triggeredACC_HIGH_G(){
YutaTogashi 0:4092428e9e15 1881 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x20) >> 5) == 1);
YutaTogashi 0:4092428e9e15 1882 }
YutaTogashi 0:4092428e9e15 1883
YutaTogashi 0:4092428e9e15 1884 /* ==================================================================
YutaTogashi 0:4092428e9e15 1885 * 発生している割り込みステータス情報(GYR_HIGH_RATE)を取得する
YutaTogashi 0:4092428e9e15 1886 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1887 * returns:
YutaTogashi 0:4092428e9e15 1888 * true:GYR_HIGH_RATEトリガー発生中
YutaTogashi 0:4092428e9e15 1889 * false:GYR_HIGH_RATEトリガーなし
YutaTogashi 0:4092428e9e15 1890 */
YutaTogashi 0:4092428e9e15 1891 bool BOARDC_BNO055::triggeredGYR_HIGH_RATE(){
YutaTogashi 0:4092428e9e15 1892 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x08) >> 3) == 1);
YutaTogashi 0:4092428e9e15 1893 }
YutaTogashi 0:4092428e9e15 1894
YutaTogashi 0:4092428e9e15 1895 /* ==================================================================
YutaTogashi 0:4092428e9e15 1896 * 発生している割り込みステータス情報(GYRO_AM)を取得する
YutaTogashi 0:4092428e9e15 1897 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1898 * returns:
YutaTogashi 0:4092428e9e15 1899 * true:GYRO_AMトリガー発生中
YutaTogashi 0:4092428e9e15 1900 * false:GYRO_AMトリガーなし
YutaTogashi 0:4092428e9e15 1901 */
YutaTogashi 0:4092428e9e15 1902 bool BOARDC_BNO055::triggeredGYRO_AM(){
YutaTogashi 0:4092428e9e15 1903 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x04) >> 2) == 1);
YutaTogashi 0:4092428e9e15 1904 }
YutaTogashi 0:4092428e9e15 1905
YutaTogashi 0:4092428e9e15 1906 /* ==================================================================
YutaTogashi 0:4092428e9e15 1907 * BNO055のシステムクロック固定情報を取得する
YutaTogashi 0:4092428e9e15 1908 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1909 * returns:
YutaTogashi 0:4092428e9e15 1910 * true:設定によって固定されている(SYS_TRIGGEレジスタのCLK_SEL)
YutaTogashi 0:4092428e9e15 1911 * false:設定されていない(内部か外部選択可)
YutaTogashi 0:4092428e9e15 1912 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1913 * setSys_ExternalCrystal(bool)で設定可
YutaTogashi 0:4092428e9e15 1914 */
YutaTogashi 0:4092428e9e15 1915 bool BOARDC_BNO055::isSystemClockFixed(){
YutaTogashi 0:4092428e9e15 1916 return (ctrl->rr(0, BNO055P0_SYS_CLK_STATUS) == 1);
YutaTogashi 0:4092428e9e15 1917 }
YutaTogashi 0:4092428e9e15 1918
YutaTogashi 0:4092428e9e15 1919 /* ==================================================================
YutaTogashi 0:4092428e9e15 1920 * BNO055のシステムステータスを取得する
YutaTogashi 0:4092428e9e15 1921 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1922 * returns:
YutaTogashi 0:4092428e9e15 1923 * 0: システム待機状態
YutaTogashi 0:4092428e9e15 1924 * 1: システムエラー
YutaTogashi 0:4092428e9e15 1925 * 2: ペリフェラル初期化中
YutaTogashi 0:4092428e9e15 1926 * 3: システム初期化中
YutaTogashi 0:4092428e9e15 1927 * 4: セルフテスト実行中
YutaTogashi 0:4092428e9e15 1928 * 5: 起動中(Fusionアルゴリズム起動中)
YutaTogashi 0:4092428e9e15 1929 * 6: 起動中(Fusionアルゴリズムなし)
YutaTogashi 0:4092428e9e15 1930 */
YutaTogashi 0:4092428e9e15 1931 char BOARDC_BNO055::getSystemStatus(){
YutaTogashi 0:4092428e9e15 1932 return ctrl->rr(0, BNO055P0_SYS_STATUS);
YutaTogashi 0:4092428e9e15 1933 }
YutaTogashi 0:4092428e9e15 1934
YutaTogashi 0:4092428e9e15 1935 /* ==================================================================
YutaTogashi 0:4092428e9e15 1936 * BNO055のシステムエラー情報を取得する
YutaTogashi 0:4092428e9e15 1937 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1938 * returns:
YutaTogashi 0:4092428e9e15 1939 * 0: エラーなし
YutaTogashi 0:4092428e9e15 1940 * 1: ペリフェラル初期化エラー
YutaTogashi 0:4092428e9e15 1941 * 2: システム初期化エラー
YutaTogashi 0:4092428e9e15 1942 * 3: セルフテスト結果不調
YutaTogashi 0:4092428e9e15 1943 * 4: レジスタマップエラー(値の範囲外)
YutaTogashi 0:4092428e9e15 1944 * 5: レジスタマップエラー(アドレスの範囲外)
YutaTogashi 0:4092428e9e15 1945 * 6: レジスタマップエラー(書き込み不能)
YutaTogashi 0:4092428e9e15 1946 * 7: BNO005LowPowerモードにつき指定モード実行不可
YutaTogashi 0:4092428e9e15 1947 * 8: 加速度センサーPowerMode実行不可
YutaTogashi 0:4092428e9e15 1948 * 9: Fusionアルゴリズム設定エラー
YutaTogashi 0:4092428e9e15 1949 * 10: 各センサー設定エラー
YutaTogashi 0:4092428e9e15 1950 */
YutaTogashi 0:4092428e9e15 1951 char BOARDC_BNO055::getSystemError(){
YutaTogashi 0:4092428e9e15 1952 return ctrl->rr(0, BNO055P0_SYS_ERR);
YutaTogashi 0:4092428e9e15 1953 }
YutaTogashi 0:4092428e9e15 1954
YutaTogashi 0:4092428e9e15 1955 /* ==================================================================
YutaTogashi 0:4092428e9e15 1956 * システムの設定単位系を取得する
YutaTogashi 0:4092428e9e15 1957 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1958 * returns:
YutaTogashi 0:4092428e9e15 1959 * 1bit目: 加速度センサー単位系(0:m/s^2, 1:mg)
YutaTogashi 0:4092428e9e15 1960 * 2bit目: 角速度センサー単位系(0:deg/s, 1:rad/s)
YutaTogashi 0:4092428e9e15 1961 * 3bit目: オイラー角単位系(0:deg, 1:rad)
YutaTogashi 0:4092428e9e15 1962 * 5bit目: 温度単位系(0:摂氏, 1:華氏)
YutaTogashi 0:4092428e9e15 1963 * 7bit目: 出力設定(0:Windows, 1:Android)
YutaTogashi 0:4092428e9e15 1964 */
YutaTogashi 0:4092428e9e15 1965 char BOARDC_BNO055::getUNIT_SEL(){
YutaTogashi 0:4092428e9e15 1966 return ctrl->rr(0, BNO055P0_UNIT_SEL);
YutaTogashi 0:4092428e9e15 1967 }
YutaTogashi 0:4092428e9e15 1968
YutaTogashi 0:4092428e9e15 1969 /* ==================================================================
YutaTogashi 0:4092428e9e15 1970 * システムの設定単位系を設定する
YutaTogashi 0:4092428e9e15 1971 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1972 * 引数selectValue:
YutaTogashi 0:4092428e9e15 1973 * 1bit目: 加速度センサー単位系(0:m/s^2, 1:mg)
YutaTogashi 0:4092428e9e15 1974 * 2bit目: 角速度センサー単位系(0:deg/s, 1:rad/s)
YutaTogashi 0:4092428e9e15 1975 * 3bit目: オイラー角単位系(0:deg, 1:rad)
YutaTogashi 0:4092428e9e15 1976 * 5bit目: 温度単位系(0:摂氏, 1:華氏)
YutaTogashi 0:4092428e9e15 1977 * 7bit目: 出力設定(0:Windows, 1:Android)
YutaTogashi 0:4092428e9e15 1978 * returns:
YutaTogashi 0:4092428e9e15 1979 * -1 失敗
YutaTogashi 0:4092428e9e15 1980 * 1 成功
YutaTogashi 0:4092428e9e15 1981 */
YutaTogashi 0:4092428e9e15 1982 char BOARDC_BNO055::setUNIT_SEL(char selectValue){
YutaTogashi 0:4092428e9e15 1983 if(ctrl->wr(0, BNO055P0_UNIT_SEL, selectValue) == -1) return -1;
YutaTogashi 0:4092428e9e15 1984
YutaTogashi 0:4092428e9e15 1985 scaleACC = ((selectValue & 0x01) == 0) ? 0.01f : 1.0f;
YutaTogashi 0:4092428e9e15 1986 scaleGYRO = ((selectValue & 0x02) == 0) ? 0.0625f : 0.001111111111f;
YutaTogashi 0:4092428e9e15 1987 scaleEuler = ((selectValue & 0x04) == 0) ? 0.0625f : 0.001111111111f;
YutaTogashi 0:4092428e9e15 1988 scaleTEMP = ((selectValue & 0x10) == 0) ? 1.0f : 2.0f;
YutaTogashi 0:4092428e9e15 1989 scaleLIA = scaleACC;
YutaTogashi 0:4092428e9e15 1990 scaleGV = scaleACC;
YutaTogashi 0:4092428e9e15 1991
YutaTogashi 0:4092428e9e15 1992 return 1;
YutaTogashi 0:4092428e9e15 1993 }
YutaTogashi 0:4092428e9e15 1994
YutaTogashi 0:4092428e9e15 1995 /* ==================================================================
YutaTogashi 0:4092428e9e15 1996 * システムの設定単位系(加速度センサー)を設定する
YutaTogashi 0:4092428e9e15 1997 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 1998 * 引数isMeterPerSec2:
YutaTogashi 0:4092428e9e15 1999 * true: m/s^2
YutaTogashi 0:4092428e9e15 2000 * false: mg
YutaTogashi 0:4092428e9e15 2001 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2002 * returns:
YutaTogashi 0:4092428e9e15 2003 * -1 失敗
YutaTogashi 0:4092428e9e15 2004 * 1 成功
YutaTogashi 0:4092428e9e15 2005 */
YutaTogashi 0:4092428e9e15 2006 char BOARDC_BNO055::setUNIT_AccUnit(bool isMeterPerSec2){
YutaTogashi 0:4092428e9e15 2007 char val = getUNIT_SEL() & 0xFE;
YutaTogashi 0:4092428e9e15 2008 if(!isMeterPerSec2) val += 1;
YutaTogashi 0:4092428e9e15 2009 return setUNIT_SEL(val);
YutaTogashi 0:4092428e9e15 2010 }
YutaTogashi 0:4092428e9e15 2011
YutaTogashi 0:4092428e9e15 2012 /* ==================================================================
YutaTogashi 0:4092428e9e15 2013 * システムの設定単位系(角速度センサー)を設定する
YutaTogashi 0:4092428e9e15 2014 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2015 * 引数isDps:
YutaTogashi 0:4092428e9e15 2016 * true: dps(Degrees/s)
YutaTogashi 0:4092428e9e15 2017 * false: rps(Radians/s)
YutaTogashi 0:4092428e9e15 2018 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2019 * returns:
YutaTogashi 0:4092428e9e15 2020 * -1 失敗
YutaTogashi 0:4092428e9e15 2021 * 1 成功
YutaTogashi 0:4092428e9e15 2022 */
YutaTogashi 0:4092428e9e15 2023 char BOARDC_BNO055::setUNIT_GyroUnit(bool isDps){
YutaTogashi 0:4092428e9e15 2024 char val = getUNIT_SEL() & 0xFD;
YutaTogashi 0:4092428e9e15 2025 if(!isDps) val += 2;
YutaTogashi 0:4092428e9e15 2026 return setUNIT_SEL(val);
YutaTogashi 0:4092428e9e15 2027 }
YutaTogashi 0:4092428e9e15 2028
YutaTogashi 0:4092428e9e15 2029 /* ==================================================================
YutaTogashi 0:4092428e9e15 2030 * システムの設定単位系(オイラー角)を設定する
YutaTogashi 0:4092428e9e15 2031 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2032 * 引数isDegrees:
YutaTogashi 0:4092428e9e15 2033 * true: Degrees
YutaTogashi 0:4092428e9e15 2034 * false: Radians
YutaTogashi 0:4092428e9e15 2035 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2036 * returns:
YutaTogashi 0:4092428e9e15 2037 * -1 失敗
YutaTogashi 0:4092428e9e15 2038 * 1 成功
YutaTogashi 0:4092428e9e15 2039 */
YutaTogashi 0:4092428e9e15 2040 char BOARDC_BNO055::setUNIT_EulerUnit(bool isDegrees){
YutaTogashi 0:4092428e9e15 2041 char val = getUNIT_SEL() & 0xFB;
YutaTogashi 0:4092428e9e15 2042 if(!isDegrees) val += 4;
YutaTogashi 0:4092428e9e15 2043 return setUNIT_SEL(val);
YutaTogashi 0:4092428e9e15 2044 }
YutaTogashi 0:4092428e9e15 2045
YutaTogashi 0:4092428e9e15 2046 /* ==================================================================
YutaTogashi 0:4092428e9e15 2047 * システムの設定単位系(温度)を設定する
YutaTogashi 0:4092428e9e15 2048 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2049 * 引数isCelsius:
YutaTogashi 0:4092428e9e15 2050 * true: 摂氏(Celsius)
YutaTogashi 0:4092428e9e15 2051 * false: 華氏(Fahrenheit)
YutaTogashi 0:4092428e9e15 2052 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2053 * returns:
YutaTogashi 0:4092428e9e15 2054 * -1 失敗
YutaTogashi 0:4092428e9e15 2055 * 1 成功
YutaTogashi 0:4092428e9e15 2056 */
YutaTogashi 0:4092428e9e15 2057 char BOARDC_BNO055::setUNIT_Temperature(bool isCelsius){
YutaTogashi 0:4092428e9e15 2058 char val = getUNIT_SEL() & 0xEF;
YutaTogashi 0:4092428e9e15 2059 if(!isCelsius) val += 16;
YutaTogashi 0:4092428e9e15 2060 return setUNIT_SEL(val);
YutaTogashi 0:4092428e9e15 2061 }
YutaTogashi 0:4092428e9e15 2062
YutaTogashi 0:4092428e9e15 2063 /* ==================================================================
YutaTogashi 0:4092428e9e15 2064 * システムの設定単位系(出力設定)を設定する
YutaTogashi 0:4092428e9e15 2065 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2066 * 引数ori_Android:
YutaTogashi 0:4092428e9e15 2067 * true: Android用(Pitch角:+180 to -180 反時計回り+)
YutaTogashi 0:4092428e9e15 2068 * false: Windows用(Pitch角:-180 to +180 時計回り+)
YutaTogashi 0:4092428e9e15 2069 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2070 * returns:
YutaTogashi 0:4092428e9e15 2071 * -1 失敗
YutaTogashi 0:4092428e9e15 2072 * 1 成功
YutaTogashi 0:4092428e9e15 2073 */
YutaTogashi 0:4092428e9e15 2074 char BOARDC_BNO055::setUNIT_OrientationMode(bool ori_Android){
YutaTogashi 0:4092428e9e15 2075 char val = getUNIT_SEL() & 0xBF;
YutaTogashi 0:4092428e9e15 2076 if(!ori_Android) val += 64;
YutaTogashi 0:4092428e9e15 2077 return setUNIT_SEL(val);
YutaTogashi 0:4092428e9e15 2078 }
YutaTogashi 0:4092428e9e15 2079
YutaTogashi 0:4092428e9e15 2080 /* ==================================================================
YutaTogashi 0:4092428e9e15 2081 * システムの動作モードを取得する
YutaTogashi 0:4092428e9e15 2082 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2083 * returns:
YutaTogashi 0:4092428e9e15 2084 * 1 ACCONLY(NO FUSION)加速度のみ
YutaTogashi 0:4092428e9e15 2085 * 2 MAGONLY(NO FUSION)地磁気のみ
YutaTogashi 0:4092428e9e15 2086 * 3 GYROONLY(NO FUSION)角速度のみ
YutaTogashi 0:4092428e9e15 2087 * 4 ACCMAG(NO FUSION)加速度と地磁気
YutaTogashi 0:4092428e9e15 2088 * 5 ACCGYRO(NO FUSION)加速度と角速度
YutaTogashi 0:4092428e9e15 2089 * 6 MAGGYRO(NO FUSION)地磁気と角速度
YutaTogashi 0:4092428e9e15 2090 * 7 AMG(NO FUSION)加速度、地磁気、角速度
YutaTogashi 0:4092428e9e15 2091 * 8 IMU
YutaTogashi 0:4092428e9e15 2092 * 9 COMPASS
YutaTogashi 0:4092428e9e15 2093 * 10 M4G
YutaTogashi 0:4092428e9e15 2094 * 11 NDOF_FMC_OFF
YutaTogashi 0:4092428e9e15 2095 * 12 NDOF
YutaTogashi 0:4092428e9e15 2096 */
YutaTogashi 0:4092428e9e15 2097 char BOARDC_BNO055::getOperationMode(){
YutaTogashi 0:4092428e9e15 2098 return ctrl->rr(0, BNO055P0_OPR_MODE);
YutaTogashi 0:4092428e9e15 2099 }
YutaTogashi 0:4092428e9e15 2100
YutaTogashi 0:4092428e9e15 2101 /* ==================================================================
YutaTogashi 0:4092428e9e15 2102 * システムの動作モードを設定する
YutaTogashi 0:4092428e9e15 2103 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2104 * 引数modeValue:
YutaTogashi 0:4092428e9e15 2105 * 1 ACCONLY(NO FUSION)加速度のみ
YutaTogashi 0:4092428e9e15 2106 * 2 MAGONLY(NO FUSION)地磁気のみ
YutaTogashi 0:4092428e9e15 2107 * 3 GYROONLY(NO FUSION)角速度のみ
YutaTogashi 0:4092428e9e15 2108 * 4 ACCMAG(NO FUSION)加速度と地磁気
YutaTogashi 0:4092428e9e15 2109 * 5 ACCGYRO(NO FUSION)加速度と角速度
YutaTogashi 0:4092428e9e15 2110 * 6 MAGGYRO(NO FUSION)地磁気と角速度
YutaTogashi 0:4092428e9e15 2111 * 7 AMG(NO FUSION)加速度、地磁気、角速度
YutaTogashi 0:4092428e9e15 2112 * 8 IMU
YutaTogashi 0:4092428e9e15 2113 * 9 COMPASS
YutaTogashi 0:4092428e9e15 2114 * 10 M4G
YutaTogashi 0:4092428e9e15 2115 * 11 NDOF_FMC_OFF
YutaTogashi 0:4092428e9e15 2116 * 12 NDOF
YutaTogashi 0:4092428e9e15 2117 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2118 * returns:
YutaTogashi 0:4092428e9e15 2119 * -1 失敗
YutaTogashi 0:4092428e9e15 2120 * 1 成功
YutaTogashi 0:4092428e9e15 2121 */
YutaTogashi 0:4092428e9e15 2122 char BOARDC_BNO055::setOperationMode(char modeValue){
YutaTogashi 0:4092428e9e15 2123 if(modeValue < 0 || modeValue > 12) modeValue = 7;
YutaTogashi 0:4092428e9e15 2124 return ctrl->wr(0, BNO055P0_OPR_MODE, modeValue);
YutaTogashi 0:4092428e9e15 2125 }
YutaTogashi 0:4092428e9e15 2126
YutaTogashi 0:4092428e9e15 2127 /* ==================================================================
YutaTogashi 0:4092428e9e15 2128 * システムの動作モードを設定モードに設定する
YutaTogashi 0:4092428e9e15 2129 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2130 * returns:
YutaTogashi 0:4092428e9e15 2131 * -1 失敗
YutaTogashi 0:4092428e9e15 2132 * 1 成功
YutaTogashi 0:4092428e9e15 2133 */
YutaTogashi 0:4092428e9e15 2134 char BOARDC_BNO055::setOperation_CONFIG(){
YutaTogashi 0:4092428e9e15 2135 return ctrl->wr(0, BNO055P0_OPR_MODE, 0);
YutaTogashi 0:4092428e9e15 2136 }
YutaTogashi 0:4092428e9e15 2137
YutaTogashi 0:4092428e9e15 2138 /* ==================================================================
YutaTogashi 0:4092428e9e15 2139 * システムの動作モードを加速度モードに設定する
YutaTogashi 0:4092428e9e15 2140 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2141 * returns:
YutaTogashi 0:4092428e9e15 2142 * -1 失敗
YutaTogashi 0:4092428e9e15 2143 * 1 成功
YutaTogashi 0:4092428e9e15 2144 */
YutaTogashi 0:4092428e9e15 2145 char BOARDC_BNO055::setOperation_ACCONRY(){
YutaTogashi 0:4092428e9e15 2146 return ctrl->wr(0, BNO055P0_OPR_MODE, 1);
YutaTogashi 0:4092428e9e15 2147 }
YutaTogashi 0:4092428e9e15 2148
YutaTogashi 0:4092428e9e15 2149 /* ==================================================================
YutaTogashi 0:4092428e9e15 2150 * システムの動作モードを地磁気モードに設定する
YutaTogashi 0:4092428e9e15 2151 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2152 * returns:
YutaTogashi 0:4092428e9e15 2153 * -1 失敗
YutaTogashi 0:4092428e9e15 2154 * 1 成功
YutaTogashi 0:4092428e9e15 2155 */
YutaTogashi 0:4092428e9e15 2156 char BOARDC_BNO055::setOperation_MAGONRY(){
YutaTogashi 0:4092428e9e15 2157 return ctrl->wr(0, BNO055P0_OPR_MODE, 2);
YutaTogashi 0:4092428e9e15 2158 }
YutaTogashi 0:4092428e9e15 2159
YutaTogashi 0:4092428e9e15 2160 /* ==================================================================
YutaTogashi 0:4092428e9e15 2161 * システムの動作モードを角速度モードに設定する
YutaTogashi 0:4092428e9e15 2162 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2163 * returns:
YutaTogashi 0:4092428e9e15 2164 * -1 失敗
YutaTogashi 0:4092428e9e15 2165 * 1 成功
YutaTogashi 0:4092428e9e15 2166 */
YutaTogashi 0:4092428e9e15 2167 char BOARDC_BNO055::setOperation_GYROONRY(){
YutaTogashi 0:4092428e9e15 2168 return ctrl->wr(0, BNO055P0_OPR_MODE, 3);
YutaTogashi 0:4092428e9e15 2169 }
YutaTogashi 0:4092428e9e15 2170
YutaTogashi 0:4092428e9e15 2171 /* ==================================================================
YutaTogashi 0:4092428e9e15 2172 * システムの動作モードを加速度地磁気モードに設定する
YutaTogashi 0:4092428e9e15 2173 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2174 * returns:
YutaTogashi 0:4092428e9e15 2175 * -1 失敗
YutaTogashi 0:4092428e9e15 2176 * 1 成功
YutaTogashi 0:4092428e9e15 2177 */
YutaTogashi 0:4092428e9e15 2178 char BOARDC_BNO055::setOperation_ACCMAG(){
YutaTogashi 0:4092428e9e15 2179 return ctrl->wr(0, BNO055P0_OPR_MODE, 4);
YutaTogashi 0:4092428e9e15 2180 }
YutaTogashi 0:4092428e9e15 2181
YutaTogashi 0:4092428e9e15 2182 /* ==================================================================
YutaTogashi 0:4092428e9e15 2183 * システムの動作モードを加速度角速度モードに設定する
YutaTogashi 0:4092428e9e15 2184 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2185 * returns:
YutaTogashi 0:4092428e9e15 2186 * -1 失敗
YutaTogashi 0:4092428e9e15 2187 * 1 成功
YutaTogashi 0:4092428e9e15 2188 */
YutaTogashi 0:4092428e9e15 2189 char BOARDC_BNO055::setOperation_ACCGYRO(){
YutaTogashi 0:4092428e9e15 2190 return ctrl->wr(0, BNO055P0_OPR_MODE, 5);
YutaTogashi 0:4092428e9e15 2191 }
YutaTogashi 0:4092428e9e15 2192
YutaTogashi 0:4092428e9e15 2193 /* ==================================================================
YutaTogashi 0:4092428e9e15 2194 * システムの動作モードを地磁気角速度モードに設定する
YutaTogashi 0:4092428e9e15 2195 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2196 * returns:
YutaTogashi 0:4092428e9e15 2197 * -1 失敗
YutaTogashi 0:4092428e9e15 2198 * 1 成功
YutaTogashi 0:4092428e9e15 2199 */
YutaTogashi 0:4092428e9e15 2200 char BOARDC_BNO055::setOperation_MAGGYRO(){
YutaTogashi 0:4092428e9e15 2201 return ctrl->wr(0, BNO055P0_OPR_MODE, 6);
YutaTogashi 0:4092428e9e15 2202 }
YutaTogashi 0:4092428e9e15 2203
YutaTogashi 0:4092428e9e15 2204 /* ==================================================================
YutaTogashi 0:4092428e9e15 2205 * システムの動作モードをFusionなし9軸モードに設定する
YutaTogashi 0:4092428e9e15 2206 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2207 * returns:
YutaTogashi 0:4092428e9e15 2208 * -1 失敗
YutaTogashi 0:4092428e9e15 2209 * 1 成功
YutaTogashi 0:4092428e9e15 2210 */
YutaTogashi 0:4092428e9e15 2211 char BOARDC_BNO055::setOperation_AMG(){
YutaTogashi 0:4092428e9e15 2212 return ctrl->wr(0, BNO055P0_OPR_MODE, 7);
YutaTogashi 0:4092428e9e15 2213 }
YutaTogashi 0:4092428e9e15 2214
YutaTogashi 0:4092428e9e15 2215 /* ==================================================================
YutaTogashi 0:4092428e9e15 2216 * システムの動作モードを6軸(加速度、角速度)Fusionモードに設定する
YutaTogashi 0:4092428e9e15 2217 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2218 * returns:
YutaTogashi 0:4092428e9e15 2219 * -1 失敗
YutaTogashi 0:4092428e9e15 2220 * 1 成功
YutaTogashi 0:4092428e9e15 2221 */
YutaTogashi 0:4092428e9e15 2222 char BOARDC_BNO055::setOperation_Fusion_IMU(){
YutaTogashi 0:4092428e9e15 2223 return ctrl->wr(0, BNO055P0_OPR_MODE, 8);
YutaTogashi 0:4092428e9e15 2224 }
YutaTogashi 0:4092428e9e15 2225
YutaTogashi 0:4092428e9e15 2226 /* ==================================================================
YutaTogashi 0:4092428e9e15 2227 * システムの動作モードを6軸(加速度、地磁気)Fusionモード(相対系)に設定する
YutaTogashi 0:4092428e9e15 2228 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2229 * returns:
YutaTogashi 0:4092428e9e15 2230 * -1 失敗
YutaTogashi 0:4092428e9e15 2231 * 1 成功
YutaTogashi 0:4092428e9e15 2232 */
YutaTogashi 0:4092428e9e15 2233 char BOARDC_BNO055::setOperation_Fusion_COMPASS(){
YutaTogashi 0:4092428e9e15 2234 return ctrl->wr(0, BNO055P0_OPR_MODE, 9);
YutaTogashi 0:4092428e9e15 2235 }
YutaTogashi 0:4092428e9e15 2236
YutaTogashi 0:4092428e9e15 2237 /* ==================================================================
YutaTogashi 0:4092428e9e15 2238 * システムの動作モードを6軸(加速度、地磁気)Fusionモード(絶対系)に設定する
YutaTogashi 0:4092428e9e15 2239 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2240 * returns:
YutaTogashi 0:4092428e9e15 2241 * -1 失敗
YutaTogashi 0:4092428e9e15 2242 * 1 成功
YutaTogashi 0:4092428e9e15 2243 */
YutaTogashi 0:4092428e9e15 2244 char BOARDC_BNO055::setOperation_Fusion_M4G(){
YutaTogashi 0:4092428e9e15 2245 return ctrl->wr(0, BNO055P0_OPR_MODE, 10);
YutaTogashi 0:4092428e9e15 2246 }
YutaTogashi 0:4092428e9e15 2247
YutaTogashi 0:4092428e9e15 2248 /* ==================================================================
YutaTogashi 0:4092428e9e15 2249 * システムの動作モードをNDOFモード(地磁気短時間補正OFF)に設定する
YutaTogashi 0:4092428e9e15 2250 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2251 * returns:
YutaTogashi 0:4092428e9e15 2252 * -1 失敗
YutaTogashi 0:4092428e9e15 2253 * 1 成功
YutaTogashi 0:4092428e9e15 2254 */
YutaTogashi 0:4092428e9e15 2255 char BOARDC_BNO055::setOperation_Fusion_NDOF_FMC_OFF(){
YutaTogashi 0:4092428e9e15 2256 return ctrl->wr(0, BNO055P0_OPR_MODE, 11);
YutaTogashi 0:4092428e9e15 2257 }
YutaTogashi 0:4092428e9e15 2258
YutaTogashi 0:4092428e9e15 2259 /* ==================================================================
YutaTogashi 0:4092428e9e15 2260 * システムの動作モードをNDOFモードに設定する
YutaTogashi 0:4092428e9e15 2261 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2262 * returns:
YutaTogashi 0:4092428e9e15 2263 * -1 失敗
YutaTogashi 0:4092428e9e15 2264 * 1 成功
YutaTogashi 0:4092428e9e15 2265 */
YutaTogashi 0:4092428e9e15 2266 char BOARDC_BNO055::setOperation_Fusion_NDOF(){
YutaTogashi 0:4092428e9e15 2267 return ctrl->wr(0, BNO055P0_OPR_MODE, 12);
YutaTogashi 0:4092428e9e15 2268 }
YutaTogashi 0:4092428e9e15 2269
YutaTogashi 0:4092428e9e15 2270 /* ==================================================================
YutaTogashi 0:4092428e9e15 2271 * システムの電源モードを取得する
YutaTogashi 0:4092428e9e15 2272 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2273 * returns:
YutaTogashi 0:4092428e9e15 2274 * 0: Normal
YutaTogashi 0:4092428e9e15 2275 * 1: LowPower
YutaTogashi 0:4092428e9e15 2276 * 2: Suspend
YutaTogashi 0:4092428e9e15 2277 */
YutaTogashi 0:4092428e9e15 2278 char BOARDC_BNO055::getPowerMode(){
YutaTogashi 0:4092428e9e15 2279 return ctrl->rr(0, BNO055P0_PWR_MODE);
YutaTogashi 0:4092428e9e15 2280 }
YutaTogashi 0:4092428e9e15 2281
YutaTogashi 0:4092428e9e15 2282 /* ==================================================================
YutaTogashi 0:4092428e9e15 2283 * システムの電源モードを設定する
YutaTogashi 0:4092428e9e15 2284 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2285 * modeValue:
YutaTogashi 0:4092428e9e15 2286 * 0: Normal
YutaTogashi 0:4092428e9e15 2287 * 1: LowPower
YutaTogashi 0:4092428e9e15 2288 * 2: Suspend
YutaTogashi 0:4092428e9e15 2289 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2290 * returns:
YutaTogashi 0:4092428e9e15 2291 * -1 失敗
YutaTogashi 0:4092428e9e15 2292 * 1 成功
YutaTogashi 0:4092428e9e15 2293 */
YutaTogashi 0:4092428e9e15 2294 char BOARDC_BNO055::setPowerMode(unsigned char modeValue){
YutaTogashi 0:4092428e9e15 2295 if(modeValue > 2) return -1;
YutaTogashi 0:4092428e9e15 2296 return ctrl->wr(0, BNO055P0_PWR_MODE, modeValue);
YutaTogashi 0:4092428e9e15 2297 }
YutaTogashi 0:4092428e9e15 2298
YutaTogashi 0:4092428e9e15 2299 /* ==================================================================
YutaTogashi 0:4092428e9e15 2300 * システムの電源モードを通常モードに設定する
YutaTogashi 0:4092428e9e15 2301 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2302 * returns:
YutaTogashi 0:4092428e9e15 2303 * -1 失敗
YutaTogashi 0:4092428e9e15 2304 * 1 成功
YutaTogashi 0:4092428e9e15 2305 */
YutaTogashi 0:4092428e9e15 2306 char BOARDC_BNO055::setPowerMode_Normal(){
YutaTogashi 0:4092428e9e15 2307 return ctrl->wr(0, BNO055P0_PWR_MODE, 0);
YutaTogashi 0:4092428e9e15 2308 }
YutaTogashi 0:4092428e9e15 2309
YutaTogashi 0:4092428e9e15 2310 /* ==================================================================
YutaTogashi 0:4092428e9e15 2311 * システムの電源モードを低消費電力モードに設定する
YutaTogashi 0:4092428e9e15 2312 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2313 * returns:
YutaTogashi 0:4092428e9e15 2314 * -1 失敗
YutaTogashi 0:4092428e9e15 2315 * 1 成功
YutaTogashi 0:4092428e9e15 2316 */
YutaTogashi 0:4092428e9e15 2317 char BOARDC_BNO055::setPowerMode_LowPower(){
YutaTogashi 0:4092428e9e15 2318 return ctrl->wr(0, BNO055P0_PWR_MODE, 1);
YutaTogashi 0:4092428e9e15 2319 }
YutaTogashi 0:4092428e9e15 2320
YutaTogashi 0:4092428e9e15 2321 /* ==================================================================
YutaTogashi 0:4092428e9e15 2322 * システムの電源モードをスリープモードに設定する
YutaTogashi 0:4092428e9e15 2323 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2324 * returns:
YutaTogashi 0:4092428e9e15 2325 * -1 失敗
YutaTogashi 0:4092428e9e15 2326 * 1 成功
YutaTogashi 0:4092428e9e15 2327 */
YutaTogashi 0:4092428e9e15 2328 char BOARDC_BNO055::setPowerMode_Suspend(){
YutaTogashi 0:4092428e9e15 2329 return ctrl->wr(0, BNO055P0_PWR_MODE, 2);
YutaTogashi 0:4092428e9e15 2330 }
YutaTogashi 0:4092428e9e15 2331
YutaTogashi 0:4092428e9e15 2332 /* ==================================================================
YutaTogashi 0:4092428e9e15 2333 * システムのトリガー設定を変更する
YutaTogashi 0:4092428e9e15 2334 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2335 * returns:
YutaTogashi 0:4092428e9e15 2336 * -1 失敗
YutaTogashi 0:4092428e9e15 2337 * 0 変更なし
YutaTogashi 0:4092428e9e15 2338 * 1 成功
YutaTogashi 0:4092428e9e15 2339 */
YutaTogashi 0:4092428e9e15 2340 char BOARDC_BNO055::setSysTrigger(char regVal){
YutaTogashi 0:4092428e9e15 2341 clkExt = regVal >> 7;
YutaTogashi 0:4092428e9e15 2342 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, regVal & 0xE1);
YutaTogashi 0:4092428e9e15 2343 }
YutaTogashi 0:4092428e9e15 2344
YutaTogashi 0:4092428e9e15 2345 /* ==================================================================
YutaTogashi 0:4092428e9e15 2346 * システムのクロック発振元を設定する
YutaTogashi 0:4092428e9e15 2347 * 外部を指定する場合は、設定前にXIN,XOUTが発振子に結線されている必要がある
YutaTogashi 0:4092428e9e15 2348 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2349 * returns:
YutaTogashi 0:4092428e9e15 2350 * -1 失敗
YutaTogashi 0:4092428e9e15 2351 * 0 変更なし
YutaTogashi 0:4092428e9e15 2352 * 1 成功
YutaTogashi 0:4092428e9e15 2353 */
YutaTogashi 0:4092428e9e15 2354 char BOARDC_BNO055::setSys_ExternalCrystal(bool isExternal){
YutaTogashi 0:4092428e9e15 2355 if(clkExt == isExternal) return 0;
YutaTogashi 0:4092428e9e15 2356
YutaTogashi 0:4092428e9e15 2357 clkExt = isExternal;
YutaTogashi 0:4092428e9e15 2358 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, (clkExt) ? 0x80 : 0x00);
YutaTogashi 0:4092428e9e15 2359 }
YutaTogashi 0:4092428e9e15 2360
YutaTogashi 0:4092428e9e15 2361 /* ==================================================================
YutaTogashi 0:4092428e9e15 2362 * システムの割り込み発生をすべてリセットする
YutaTogashi 0:4092428e9e15 2363 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2364 * returns:
YutaTogashi 0:4092428e9e15 2365 * -1 失敗
YutaTogashi 0:4092428e9e15 2366 * 1 成功
YutaTogashi 0:4092428e9e15 2367 */
YutaTogashi 0:4092428e9e15 2368 char BOARDC_BNO055::resetInterrupt(){
YutaTogashi 0:4092428e9e15 2369 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x40);
YutaTogashi 0:4092428e9e15 2370 }
YutaTogashi 0:4092428e9e15 2371
YutaTogashi 0:4092428e9e15 2372 /* ==================================================================
YutaTogashi 0:4092428e9e15 2373 * システムをリセットする
YutaTogashi 0:4092428e9e15 2374 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2375 * returns:
YutaTogashi 0:4092428e9e15 2376 * -1 失敗
YutaTogashi 0:4092428e9e15 2377 * 1 成功
YutaTogashi 0:4092428e9e15 2378 */
YutaTogashi 0:4092428e9e15 2379 char BOARDC_BNO055::soft_reset(){
YutaTogashi 0:4092428e9e15 2380 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x20);
YutaTogashi 0:4092428e9e15 2381 }
YutaTogashi 0:4092428e9e15 2382
YutaTogashi 0:4092428e9e15 2383 /* ==================================================================
YutaTogashi 0:4092428e9e15 2384 * セルフテストを実行する
YutaTogashi 0:4092428e9e15 2385 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2386 * returns:
YutaTogashi 0:4092428e9e15 2387 * -1 失敗
YutaTogashi 0:4092428e9e15 2388 * 1 成功
YutaTogashi 0:4092428e9e15 2389 */
YutaTogashi 0:4092428e9e15 2390 char BOARDC_BNO055::execSelfTest(){
YutaTogashi 0:4092428e9e15 2391 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x01);
YutaTogashi 0:4092428e9e15 2392 }
YutaTogashi 0:4092428e9e15 2393
YutaTogashi 0:4092428e9e15 2394 /* ==================================================================
YutaTogashi 0:4092428e9e15 2395 * システムの温度計測に使用するセンサーを取得する
YutaTogashi 0:4092428e9e15 2396 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2397 * returns:
YutaTogashi 0:4092428e9e15 2398 * 0 温度計測に加速度センサーを使用している
YutaTogashi 0:4092428e9e15 2399 * 1 温度計測に角速度センサーを使用している
YutaTogashi 0:4092428e9e15 2400 */
YutaTogashi 0:4092428e9e15 2401 char BOARDC_BNO055::getTempSource(){
YutaTogashi 0:4092428e9e15 2402 return ctrl->rr(0, BNO055P0_TEMP_SOURCE);
YutaTogashi 0:4092428e9e15 2403 }
YutaTogashi 0:4092428e9e15 2404
YutaTogashi 0:4092428e9e15 2405 /* ==================================================================
YutaTogashi 0:4092428e9e15 2406 * システムの温度計測に使用するセンサーを選択する
YutaTogashi 0:4092428e9e15 2407 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2408 * 引数Accelerometer:
YutaTogashi 0:4092428e9e15 2409 * true:加速度センサーを温度計測に使用する
YutaTogashi 0:4092428e9e15 2410 * false:角速度センサーを温度計測に使用する
YutaTogashi 0:4092428e9e15 2411 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2412 * returns:
YutaTogashi 0:4092428e9e15 2413 * -1 失敗
YutaTogashi 0:4092428e9e15 2414 * 1 成功
YutaTogashi 0:4092428e9e15 2415 */
YutaTogashi 0:4092428e9e15 2416 char BOARDC_BNO055::setTempSource(bool Accelerometer){
YutaTogashi 0:4092428e9e15 2417 return ctrl->wr(0, BNO055P0_TEMP_SOURCE, (Accelerometer) ? 0 : 1);
YutaTogashi 0:4092428e9e15 2418 }
YutaTogashi 0:4092428e9e15 2419
YutaTogashi 0:4092428e9e15 2420 /* ==================================================================
YutaTogashi 0:4092428e9e15 2421 * センサー出力軸交換情報の取得
YutaTogashi 0:4092428e9e15 2422 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2423 * returns:
YutaTogashi 0:4092428e9e15 2424 * AXIS_MAP_CONFIGの設定情報:BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2425 */
YutaTogashi 0:4092428e9e15 2426 char BOARDC_BNO055::getAxisMapConfig(){
YutaTogashi 0:4092428e9e15 2427 char ret = ctrl->rr(0, BNO055P0_AXIS_MAP_CONFIG);
YutaTogashi 0:4092428e9e15 2428 if(axisRemap != ret) axisRemap = ret;
YutaTogashi 0:4092428e9e15 2429 return axisRemap;
YutaTogashi 0:4092428e9e15 2430 }
YutaTogashi 0:4092428e9e15 2431
YutaTogashi 0:4092428e9e15 2432 /* ==================================================================
YutaTogashi 0:4092428e9e15 2433 * センサー出力軸交換の設定
YutaTogashi 0:4092428e9e15 2434 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2435 * 引数val:
YutaTogashi 0:4092428e9e15 2436 * X,Y,Zの出力交換の情報
YutaTogashi 0:4092428e9e15 2437 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2438 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2439 * returns:
YutaTogashi 0:4092428e9e15 2440 * -1 失敗
YutaTogashi 0:4092428e9e15 2441 * 0 変更なし
YutaTogashi 0:4092428e9e15 2442 * 1 成功
YutaTogashi 0:4092428e9e15 2443 */
YutaTogashi 0:4092428e9e15 2444 char BOARDC_BNO055::setAxisMapConfig(char val){
YutaTogashi 0:4092428e9e15 2445 if(axisRemap == (val & 0x3F)) return 0;
YutaTogashi 0:4092428e9e15 2446 else axisRemap = (val & 0x3F);
YutaTogashi 0:4092428e9e15 2447 return ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2448 }
YutaTogashi 0:4092428e9e15 2449
YutaTogashi 0:4092428e9e15 2450 /* ==================================================================
YutaTogashi 0:4092428e9e15 2451 * センサー出力軸符号情報の取得
YutaTogashi 0:4092428e9e15 2452 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2453 * returns:
YutaTogashi 0:4092428e9e15 2454 * AXIS_MAP_SIGNの設定情報:BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2455 */
YutaTogashi 0:4092428e9e15 2456 char BOARDC_BNO055::getAxisMapSign(){
YutaTogashi 0:4092428e9e15 2457 char ret = ctrl->rr(0, BNO055P0_AXIS_MAP_SIGN);
YutaTogashi 0:4092428e9e15 2458 if(axisSign != ret) axisSign = ret;
YutaTogashi 0:4092428e9e15 2459 return axisSign;
YutaTogashi 0:4092428e9e15 2460 }
YutaTogashi 0:4092428e9e15 2461
YutaTogashi 0:4092428e9e15 2462 /* ==================================================================
YutaTogashi 0:4092428e9e15 2463 * センサー出力軸符号の設定
YutaTogashi 0:4092428e9e15 2464 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2465 * 引数val:
YutaTogashi 0:4092428e9e15 2466 * X,Y,Zの出力符号の情報
YutaTogashi 0:4092428e9e15 2467 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2468 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2469 * returns:
YutaTogashi 0:4092428e9e15 2470 * -1 失敗
YutaTogashi 0:4092428e9e15 2471 * 0 変更なし
YutaTogashi 0:4092428e9e15 2472 * 1 成功
YutaTogashi 0:4092428e9e15 2473 */
YutaTogashi 0:4092428e9e15 2474 char BOARDC_BNO055::setAxisMapSign(char val){
YutaTogashi 0:4092428e9e15 2475 if(axisSign == (val & 0x07)) return 0;
YutaTogashi 0:4092428e9e15 2476 else axisSign = (val & 0x07);
YutaTogashi 0:4092428e9e15 2477 return ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2478 }
YutaTogashi 0:4092428e9e15 2479
YutaTogashi 0:4092428e9e15 2480 /* ==================================================================
YutaTogashi 0:4092428e9e15 2481 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側左上]
YutaTogashi 0:4092428e9e15 2482 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2483 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2484 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2485 * returns:
YutaTogashi 0:4092428e9e15 2486 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2487 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2488 * 1 成功
YutaTogashi 0:4092428e9e15 2489 */
YutaTogashi 0:4092428e9e15 2490 char BOARDC_BNO055::setAxisRemap_topview_topleft(){
YutaTogashi 0:4092428e9e15 2491 axisRemap = 0x21;
YutaTogashi 0:4092428e9e15 2492 axisSign = 0x04;
YutaTogashi 0:4092428e9e15 2493 char ret = 0;
YutaTogashi 0:4092428e9e15 2494 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2495 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2496 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2497 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2498 return 1;
YutaTogashi 0:4092428e9e15 2499 }
YutaTogashi 0:4092428e9e15 2500
YutaTogashi 0:4092428e9e15 2501 /* ==================================================================
YutaTogashi 0:4092428e9e15 2502 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側右上]
YutaTogashi 0:4092428e9e15 2503 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2504 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2505 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2506 * returns:
YutaTogashi 0:4092428e9e15 2507 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2508 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2509 * 1 成功
YutaTogashi 0:4092428e9e15 2510 */
YutaTogashi 0:4092428e9e15 2511 char BOARDC_BNO055::setAxisRemap_topview_topright(){
YutaTogashi 0:4092428e9e15 2512 axisRemap = 0x24;
YutaTogashi 0:4092428e9e15 2513 axisSign = 0x00;
YutaTogashi 0:4092428e9e15 2514 char ret = 0;
YutaTogashi 0:4092428e9e15 2515 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2516 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2517 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2518 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2519 return 1;
YutaTogashi 0:4092428e9e15 2520 }
YutaTogashi 0:4092428e9e15 2521
YutaTogashi 0:4092428e9e15 2522 /* ==================================================================
YutaTogashi 0:4092428e9e15 2523 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側左下]
YutaTogashi 0:4092428e9e15 2524 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2525 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2526 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2527 * returns:
YutaTogashi 0:4092428e9e15 2528 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2529 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2530 * 1 成功
YutaTogashi 0:4092428e9e15 2531 */
YutaTogashi 0:4092428e9e15 2532 char BOARDC_BNO055::setAxisRemap_topview_bottomleft(){
YutaTogashi 0:4092428e9e15 2533 axisRemap = 0x24;
YutaTogashi 0:4092428e9e15 2534 axisSign = 0x06;
YutaTogashi 0:4092428e9e15 2535 char ret = 0;
YutaTogashi 0:4092428e9e15 2536 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2537 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2538 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2539 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2540 return 1;
YutaTogashi 0:4092428e9e15 2541 }
YutaTogashi 0:4092428e9e15 2542
YutaTogashi 0:4092428e9e15 2543 /* ==================================================================
YutaTogashi 0:4092428e9e15 2544 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側右下]
YutaTogashi 0:4092428e9e15 2545 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2546 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2547 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2548 * returns:
YutaTogashi 0:4092428e9e15 2549 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2550 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2551 * 1 成功
YutaTogashi 0:4092428e9e15 2552 */
YutaTogashi 0:4092428e9e15 2553 char BOARDC_BNO055::setAxisRemap_topview_bottomright(){
YutaTogashi 0:4092428e9e15 2554 axisRemap = 0x21;
YutaTogashi 0:4092428e9e15 2555 axisSign = 0x02;
YutaTogashi 0:4092428e9e15 2556 char ret = 0;
YutaTogashi 0:4092428e9e15 2557 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2558 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2559 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2560 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2561 return 1;
YutaTogashi 0:4092428e9e15 2562 }
YutaTogashi 0:4092428e9e15 2563
YutaTogashi 0:4092428e9e15 2564 /* ==================================================================
YutaTogashi 0:4092428e9e15 2565 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側左上]
YutaTogashi 0:4092428e9e15 2566 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2567 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2568 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2569 * returns:
YutaTogashi 0:4092428e9e15 2570 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2571 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2572 * 1 成功
YutaTogashi 0:4092428e9e15 2573 */
YutaTogashi 0:4092428e9e15 2574 char BOARDC_BNO055::setAxisRemap_bottomview_topleft(){
YutaTogashi 0:4092428e9e15 2575 axisRemap = 0x24;
YutaTogashi 0:4092428e9e15 2576 axisSign = 0x03;
YutaTogashi 0:4092428e9e15 2577 char ret = 0;
YutaTogashi 0:4092428e9e15 2578 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2579 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2580 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2581 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2582 return 1;
YutaTogashi 0:4092428e9e15 2583 }
YutaTogashi 0:4092428e9e15 2584
YutaTogashi 0:4092428e9e15 2585 /* ==================================================================
YutaTogashi 0:4092428e9e15 2586 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側右上]
YutaTogashi 0:4092428e9e15 2587 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2588 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2589 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2590 * returns:
YutaTogashi 0:4092428e9e15 2591 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2592 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2593 * 1 成功
YutaTogashi 0:4092428e9e15 2594 */
YutaTogashi 0:4092428e9e15 2595 char BOARDC_BNO055::setAxisRemap_bottomview_topright(){
YutaTogashi 0:4092428e9e15 2596 axisRemap = 0x21;
YutaTogashi 0:4092428e9e15 2597 axisSign = 0x01;
YutaTogashi 0:4092428e9e15 2598 char ret = 0;
YutaTogashi 0:4092428e9e15 2599 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2600 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2601 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2602 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2603 return 1;
YutaTogashi 0:4092428e9e15 2604 }
YutaTogashi 0:4092428e9e15 2605
YutaTogashi 0:4092428e9e15 2606 /* ==================================================================
YutaTogashi 0:4092428e9e15 2607 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側左下]
YutaTogashi 0:4092428e9e15 2608 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2609 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2610 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2611 * returns:
YutaTogashi 0:4092428e9e15 2612 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2613 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2614 * 1 成功
YutaTogashi 0:4092428e9e15 2615 */
YutaTogashi 0:4092428e9e15 2616 char BOARDC_BNO055::setAxisRemap_bottomview_bottomleft(){
YutaTogashi 0:4092428e9e15 2617 axisRemap = 0x21;
YutaTogashi 0:4092428e9e15 2618 axisSign = 0x07;
YutaTogashi 0:4092428e9e15 2619 char ret = 0;
YutaTogashi 0:4092428e9e15 2620 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2621 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2622 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2623 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2624 return 1;
YutaTogashi 0:4092428e9e15 2625 }
YutaTogashi 0:4092428e9e15 2626
YutaTogashi 0:4092428e9e15 2627 /* ==================================================================
YutaTogashi 0:4092428e9e15 2628 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側右下]
YutaTogashi 0:4092428e9e15 2629 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2630 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2631 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2632 * returns:
YutaTogashi 0:4092428e9e15 2633 * -1 AXIS_MAP_CONFIG設定の失敗
YutaTogashi 0:4092428e9e15 2634 * -2 AXIS_MAP_SIGN設定の失敗
YutaTogashi 0:4092428e9e15 2635 * 1 成功
YutaTogashi 0:4092428e9e15 2636 */
YutaTogashi 0:4092428e9e15 2637 char BOARDC_BNO055::setAxisRemap_bottomview_bottomright(){
YutaTogashi 0:4092428e9e15 2638 axisRemap = 0x24;
YutaTogashi 0:4092428e9e15 2639 axisSign = 0x05;
YutaTogashi 0:4092428e9e15 2640 char ret = 0;
YutaTogashi 0:4092428e9e15 2641 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
YutaTogashi 0:4092428e9e15 2642 if(ret == -1) return -1;
YutaTogashi 0:4092428e9e15 2643 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
YutaTogashi 0:4092428e9e15 2644 if(ret == -1) return -2;
YutaTogashi 0:4092428e9e15 2645 return 1;
YutaTogashi 0:4092428e9e15 2646 }
YutaTogashi 0:4092428e9e15 2647
YutaTogashi 0:4092428e9e15 2648 /* ==================================================================
YutaTogashi 0:4092428e9e15 2649 * センサー出力軸の符号と交換の情報を直感的な形で取得する
YutaTogashi 0:4092428e9e15 2650 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2651 * (BNO055データシート [3.4 Axis remap] を参照
YutaTogashi 0:4092428e9e15 2652 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2653 * returns:
YutaTogashi 0:4092428e9e15 2654 * 0 [P0]表側から見たとき、BNO055の1pinが表側左上にある状態
YutaTogashi 0:4092428e9e15 2655 * 1 [P1]表側から見たとき、BNO055の1pinが表側右上にある状態
YutaTogashi 0:4092428e9e15 2656 * 2 [P2]表側から見たとき、BNO055の1pinが表側左下にある状態
YutaTogashi 0:4092428e9e15 2657 * 3 [P3]表側から見たとき、BNO055の1pinが表側右下にある状態
YutaTogashi 0:4092428e9e15 2658 * 4 [P4]表側から見たとき、BNO055の1pinが裏側左上にある状態
YutaTogashi 0:4092428e9e15 2659 * 5 [P5]表側から見たとき、BNO055の1pinが裏側右上にある状態
YutaTogashi 0:4092428e9e15 2660 * 6 [P6]表側から見たとき、BNO055の1pinが裏側左下にある状態
YutaTogashi 0:4092428e9e15 2661 * 7 [P7]表側から見たとき、BNO055の1pinが裏側右下にある状態
YutaTogashi 0:4092428e9e15 2662 * -1 それ以外の設定
YutaTogashi 0:4092428e9e15 2663 */
YutaTogashi 0:4092428e9e15 2664 char BOARDC_BNO055::getAxisRemap_type(){
YutaTogashi 0:4092428e9e15 2665 getAxisMapConfig(); //axisRemapに最新の値を格納
YutaTogashi 0:4092428e9e15 2666 getAxisMapSign(); //axisSignに最新の値を格納
YutaTogashi 0:4092428e9e15 2667
YutaTogashi 0:4092428e9e15 2668 if(axisRemap == 0x21){
YutaTogashi 0:4092428e9e15 2669 switch(axisSign){
YutaTogashi 0:4092428e9e15 2670 case 0x04:
YutaTogashi 0:4092428e9e15 2671 return 0;
YutaTogashi 0:4092428e9e15 2672 case 0x02:
YutaTogashi 0:4092428e9e15 2673 return 3;
YutaTogashi 0:4092428e9e15 2674 case 0x01:
YutaTogashi 0:4092428e9e15 2675 return 5;
YutaTogashi 0:4092428e9e15 2676 case 0x07:
YutaTogashi 0:4092428e9e15 2677 return 6;
YutaTogashi 0:4092428e9e15 2678 }
YutaTogashi 0:4092428e9e15 2679 }else if(axisRemap == 0x24){
YutaTogashi 0:4092428e9e15 2680 switch(axisSign){
YutaTogashi 0:4092428e9e15 2681 case 0x00:
YutaTogashi 0:4092428e9e15 2682 return 1;
YutaTogashi 0:4092428e9e15 2683 case 0x06:
YutaTogashi 0:4092428e9e15 2684 return 2;
YutaTogashi 0:4092428e9e15 2685 case 0x03:
YutaTogashi 0:4092428e9e15 2686 return 4;
YutaTogashi 0:4092428e9e15 2687 case 0x05:
YutaTogashi 0:4092428e9e15 2688 return 7;
YutaTogashi 0:4092428e9e15 2689 }
YutaTogashi 0:4092428e9e15 2690 }
YutaTogashi 0:4092428e9e15 2691
YutaTogashi 0:4092428e9e15 2692 return -1;
YutaTogashi 0:4092428e9e15 2693 }
YutaTogashi 0:4092428e9e15 2694
YutaTogashi 0:4092428e9e15 2695 /* ==================================================================
YutaTogashi 0:4092428e9e15 2696 * 加速度センサーの補正値を取得する
YutaTogashi 0:4092428e9e15 2697 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2698 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
YutaTogashi 0:4092428e9e15 2699 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
YutaTogashi 0:4092428e9e15 2700 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
YutaTogashi 0:4092428e9e15 2701 */
YutaTogashi 0:4092428e9e15 2702 void BOARDC_BNO055::getAccOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
YutaTogashi 0:4092428e9e15 2703 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 2704 char rsv[6];
YutaTogashi 0:4092428e9e15 2705 ctrl->rrc(0, BNO055P0_ACC_OFFSET_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 2706
YutaTogashi 0:4092428e9e15 2707 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2708 short offY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 2709 short offZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 2710 offsetX = (1.0f * offX) * scaleACC;
YutaTogashi 0:4092428e9e15 2711 offsetY = (1.0f * offY) * scaleACC;
YutaTogashi 0:4092428e9e15 2712 offsetZ = (1.0f * offZ) * scaleACC;
YutaTogashi 0:4092428e9e15 2713 }
YutaTogashi 0:4092428e9e15 2714
YutaTogashi 0:4092428e9e15 2715 /* ==================================================================
YutaTogashi 0:4092428e9e15 2716 * 加速度センサーの補正値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2717 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2718 * returns:
YutaTogashi 0:4092428e9e15 2719 * X軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2720 */
YutaTogashi 0:4092428e9e15 2721 float BOARDC_BNO055::getAccOffsetX(){
YutaTogashi 0:4092428e9e15 2722 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2723 char rsv[2];
YutaTogashi 0:4092428e9e15 2724 ctrl->rrc(0, BNO055P0_ACC_OFFSET_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2725
YutaTogashi 0:4092428e9e15 2726 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2727 return (1.0f * offX) * scaleACC;
YutaTogashi 0:4092428e9e15 2728 }
YutaTogashi 0:4092428e9e15 2729
YutaTogashi 0:4092428e9e15 2730 /* ==================================================================
YutaTogashi 0:4092428e9e15 2731 * 加速度センサーの補正値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2732 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2733 * returns:
YutaTogashi 0:4092428e9e15 2734 * Y軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2735 */
YutaTogashi 0:4092428e9e15 2736 float BOARDC_BNO055::getAccOffsetY(){
YutaTogashi 0:4092428e9e15 2737 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2738 char rsv[2];
YutaTogashi 0:4092428e9e15 2739 ctrl->rrc(0, BNO055P0_ACC_OFFSET_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2740
YutaTogashi 0:4092428e9e15 2741 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2742 return (1.0f * offX) * scaleACC;
YutaTogashi 0:4092428e9e15 2743 }
YutaTogashi 0:4092428e9e15 2744
YutaTogashi 0:4092428e9e15 2745 /* ==================================================================
YutaTogashi 0:4092428e9e15 2746 * 加速度センサーの補正値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2747 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2748 * returns:
YutaTogashi 0:4092428e9e15 2749 * Z軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2750 */
YutaTogashi 0:4092428e9e15 2751 float BOARDC_BNO055::getAccOffsetZ(){
YutaTogashi 0:4092428e9e15 2752 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2753 char rsv[2];
YutaTogashi 0:4092428e9e15 2754 ctrl->rrc(0, BNO055P0_ACC_OFFSET_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2755
YutaTogashi 0:4092428e9e15 2756 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2757 return (1.0f * offX) * scaleACC;
YutaTogashi 0:4092428e9e15 2758 }
YutaTogashi 0:4092428e9e15 2759
YutaTogashi 0:4092428e9e15 2760 /* ==================================================================
YutaTogashi 0:4092428e9e15 2761 * 加速度センサーの補正値を設定する
YutaTogashi 0:4092428e9e15 2762 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2763 * offsetX: スケール乗算済みのX軸の補正値
YutaTogashi 0:4092428e9e15 2764 * offsetY: スケール乗算済みのY軸の補正値
YutaTogashi 0:4092428e9e15 2765 * offsetZ: スケール乗算済みのZ軸の補正値
YutaTogashi 0:4092428e9e15 2766 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2767 * returns:
YutaTogashi 0:4092428e9e15 2768 * -1 失敗
YutaTogashi 0:4092428e9e15 2769 * 1 成功
YutaTogashi 0:4092428e9e15 2770 */
YutaTogashi 0:4092428e9e15 2771 char BOARDC_BNO055::setAccOffsetAll(float offsetX, float offsetY, float offsetZ){
YutaTogashi 0:4092428e9e15 2772 short offX = (short)((offsetX / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2773 short offY = (short)((offsetY / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2774 short offZ = (short)((offsetZ / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2775 char msg[6];
YutaTogashi 0:4092428e9e15 2776 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 2777 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 2778 msg[2] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 2779 msg[3] = offY >> 8;
YutaTogashi 0:4092428e9e15 2780 msg[4] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 2781 msg[5] = offZ >> 8;
YutaTogashi 0:4092428e9e15 2782
YutaTogashi 0:4092428e9e15 2783 //連続6byte書き込み
YutaTogashi 0:4092428e9e15 2784 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_X_LSB, msg, 6);
YutaTogashi 0:4092428e9e15 2785 }
YutaTogashi 0:4092428e9e15 2786
YutaTogashi 0:4092428e9e15 2787 char BOARDC_BNO055::setAccOffsetX(float offset){
YutaTogashi 0:4092428e9e15 2788 short offX = (short)((offset / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2789 char msg[2];
YutaTogashi 0:4092428e9e15 2790 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 2791 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 2792
YutaTogashi 0:4092428e9e15 2793 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2794 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_X_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2795 }
YutaTogashi 0:4092428e9e15 2796
YutaTogashi 0:4092428e9e15 2797 char BOARDC_BNO055::setAccOffsetY(float offset){
YutaTogashi 0:4092428e9e15 2798 short offY = (short)((offset / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2799 char msg[2];
YutaTogashi 0:4092428e9e15 2800 msg[0] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 2801 msg[1] = offY >> 8;
YutaTogashi 0:4092428e9e15 2802
YutaTogashi 0:4092428e9e15 2803 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2804 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_Y_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2805 }
YutaTogashi 0:4092428e9e15 2806
YutaTogashi 0:4092428e9e15 2807 char BOARDC_BNO055::setAccOffsetZ(float offset){
YutaTogashi 0:4092428e9e15 2808 short offZ = (short)((offset / scaleACC) + 0.5f);
YutaTogashi 0:4092428e9e15 2809 char msg[2];
YutaTogashi 0:4092428e9e15 2810 msg[0] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 2811 msg[1] = offZ >> 8;
YutaTogashi 0:4092428e9e15 2812
YutaTogashi 0:4092428e9e15 2813 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2814 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_Z_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2815 }
YutaTogashi 0:4092428e9e15 2816
YutaTogashi 0:4092428e9e15 2817 /* ==================================================================
YutaTogashi 0:4092428e9e15 2818 * 地磁気センサーの補正値を取得する
YutaTogashi 0:4092428e9e15 2819 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2820 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
YutaTogashi 0:4092428e9e15 2821 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
YutaTogashi 0:4092428e9e15 2822 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
YutaTogashi 0:4092428e9e15 2823 */
YutaTogashi 0:4092428e9e15 2824 void BOARDC_BNO055::getMagOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
YutaTogashi 0:4092428e9e15 2825 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 2826 char rsv[6];
YutaTogashi 0:4092428e9e15 2827 ctrl->rrc(0, BNO055P0_MAG_OFFSET_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 2828
YutaTogashi 0:4092428e9e15 2829 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2830 short offY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 2831 short offZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 2832 offsetX = (1.0f * offX) * scaleMAG;
YutaTogashi 0:4092428e9e15 2833 offsetY = (1.0f * offY) * scaleMAG;
YutaTogashi 0:4092428e9e15 2834 offsetZ = (1.0f * offZ) * scaleMAG;
YutaTogashi 0:4092428e9e15 2835 }
YutaTogashi 0:4092428e9e15 2836
YutaTogashi 0:4092428e9e15 2837 /* ==================================================================
YutaTogashi 0:4092428e9e15 2838 * 地磁気センサーの補正値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2839 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2840 * returns:
YutaTogashi 0:4092428e9e15 2841 * X軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2842 */
YutaTogashi 0:4092428e9e15 2843 float BOARDC_BNO055::getMagOffsetX(){
YutaTogashi 0:4092428e9e15 2844 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2845 char rsv[2];
YutaTogashi 0:4092428e9e15 2846 ctrl->rrc(0, BNO055P0_MAG_OFFSET_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2847
YutaTogashi 0:4092428e9e15 2848 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2849 return (1.0f * offX) * scaleMAG;
YutaTogashi 0:4092428e9e15 2850 }
YutaTogashi 0:4092428e9e15 2851
YutaTogashi 0:4092428e9e15 2852 /* ==================================================================
YutaTogashi 0:4092428e9e15 2853 * 地磁気センサーの補正値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2854 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2855 * returns:
YutaTogashi 0:4092428e9e15 2856 * Y軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2857 */
YutaTogashi 0:4092428e9e15 2858 float BOARDC_BNO055::getMagOffsetY(){
YutaTogashi 0:4092428e9e15 2859 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2860 char rsv[2];
YutaTogashi 0:4092428e9e15 2861 ctrl->rrc(0, BNO055P0_MAG_OFFSET_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2862
YutaTogashi 0:4092428e9e15 2863 short offY = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2864 return (1.0f * offY) * scaleMAG;
YutaTogashi 0:4092428e9e15 2865 }
YutaTogashi 0:4092428e9e15 2866
YutaTogashi 0:4092428e9e15 2867 /* ==================================================================
YutaTogashi 0:4092428e9e15 2868 * 地磁気センサーの補正値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2869 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2870 * returns:
YutaTogashi 0:4092428e9e15 2871 * Z軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2872 */
YutaTogashi 0:4092428e9e15 2873 float BOARDC_BNO055::getMagOffsetZ(){
YutaTogashi 0:4092428e9e15 2874 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2875 char rsv[2];
YutaTogashi 0:4092428e9e15 2876 ctrl->rrc(0, BNO055P0_MAG_OFFSET_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2877
YutaTogashi 0:4092428e9e15 2878 short offZ = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2879 return (1.0f * offZ) * scaleMAG;
YutaTogashi 0:4092428e9e15 2880 }
YutaTogashi 0:4092428e9e15 2881
YutaTogashi 0:4092428e9e15 2882 /* ==================================================================
YutaTogashi 0:4092428e9e15 2883 * 地磁気センサーの補正値を設定する
YutaTogashi 0:4092428e9e15 2884 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2885 * offsetX: スケール乗算済みのX軸の補正値
YutaTogashi 0:4092428e9e15 2886 * offsetY: スケール乗算済みのY軸の補正値
YutaTogashi 0:4092428e9e15 2887 * offsetZ: スケール乗算済みのZ軸の補正値
YutaTogashi 0:4092428e9e15 2888 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2889 * returns:
YutaTogashi 0:4092428e9e15 2890 * -1 失敗
YutaTogashi 0:4092428e9e15 2891 * 1 成功
YutaTogashi 0:4092428e9e15 2892 */
YutaTogashi 0:4092428e9e15 2893 char BOARDC_BNO055::setMagOffsetAll(float offsetX, float offsetY, float offsetZ){
YutaTogashi 0:4092428e9e15 2894 short offX = (short)((offsetX / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2895 short offY = (short)((offsetY / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2896 short offZ = (short)((offsetZ / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2897 char msg[6];
YutaTogashi 0:4092428e9e15 2898 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 2899 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 2900 msg[2] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 2901 msg[3] = offY >> 8;
YutaTogashi 0:4092428e9e15 2902 msg[4] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 2903 msg[5] = offZ >> 8;
YutaTogashi 0:4092428e9e15 2904
YutaTogashi 0:4092428e9e15 2905 //連続6byte書き込み
YutaTogashi 0:4092428e9e15 2906 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_X_LSB, msg, 6);
YutaTogashi 0:4092428e9e15 2907 }
YutaTogashi 0:4092428e9e15 2908
YutaTogashi 0:4092428e9e15 2909 /* ==================================================================
YutaTogashi 0:4092428e9e15 2910 * 地磁気センサーの補正値(X軸のみ)を設定する
YutaTogashi 0:4092428e9e15 2911 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2912 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 2913 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2914 * returns:
YutaTogashi 0:4092428e9e15 2915 * -1 失敗
YutaTogashi 0:4092428e9e15 2916 * 1 成功
YutaTogashi 0:4092428e9e15 2917 */
YutaTogashi 0:4092428e9e15 2918 char BOARDC_BNO055::setMagOffsetX(float offset){
YutaTogashi 0:4092428e9e15 2919 short offX = (short)((offset / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2920 char msg[2];
YutaTogashi 0:4092428e9e15 2921 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 2922 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 2923
YutaTogashi 0:4092428e9e15 2924 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2925 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_X_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2926 }
YutaTogashi 0:4092428e9e15 2927
YutaTogashi 0:4092428e9e15 2928 /* ==================================================================
YutaTogashi 0:4092428e9e15 2929 * 地磁気センサーの補正値(Y軸のみ)を設定する
YutaTogashi 0:4092428e9e15 2930 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2931 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 2932 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2933 * returns:
YutaTogashi 0:4092428e9e15 2934 * -1 失敗
YutaTogashi 0:4092428e9e15 2935 * 1 成功
YutaTogashi 0:4092428e9e15 2936 */
YutaTogashi 0:4092428e9e15 2937 char BOARDC_BNO055::setMagOffsetY(float offset){
YutaTogashi 0:4092428e9e15 2938 short offY = (short)((offset / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2939 char msg[2];
YutaTogashi 0:4092428e9e15 2940 msg[0] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 2941 msg[1] = offY >> 8;
YutaTogashi 0:4092428e9e15 2942
YutaTogashi 0:4092428e9e15 2943 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2944 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_Y_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2945 }
YutaTogashi 0:4092428e9e15 2946
YutaTogashi 0:4092428e9e15 2947 /* ==================================================================
YutaTogashi 0:4092428e9e15 2948 * 地磁気センサーの補正値(Z軸のみ)を設定する
YutaTogashi 0:4092428e9e15 2949 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2950 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 2951 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2952 * returns:
YutaTogashi 0:4092428e9e15 2953 * -1 失敗
YutaTogashi 0:4092428e9e15 2954 * 1 成功
YutaTogashi 0:4092428e9e15 2955 */
YutaTogashi 0:4092428e9e15 2956 char BOARDC_BNO055::setMagOffsetZ(float offset){
YutaTogashi 0:4092428e9e15 2957 short offZ = (short)((offset / scaleMAG) + 0.5f);
YutaTogashi 0:4092428e9e15 2958 char msg[2];
YutaTogashi 0:4092428e9e15 2959 msg[0] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 2960 msg[1] = offZ >> 8;
YutaTogashi 0:4092428e9e15 2961
YutaTogashi 0:4092428e9e15 2962 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 2963 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_Z_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 2964 }
YutaTogashi 0:4092428e9e15 2965
YutaTogashi 0:4092428e9e15 2966 /* ==================================================================
YutaTogashi 0:4092428e9e15 2967 * 角速度センサーの補正値を取得する
YutaTogashi 0:4092428e9e15 2968 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2969 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
YutaTogashi 0:4092428e9e15 2970 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
YutaTogashi 0:4092428e9e15 2971 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
YutaTogashi 0:4092428e9e15 2972 */
YutaTogashi 0:4092428e9e15 2973 void BOARDC_BNO055::getGyroOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
YutaTogashi 0:4092428e9e15 2974 //連続6byte読み取り
YutaTogashi 0:4092428e9e15 2975 char rsv[6];
YutaTogashi 0:4092428e9e15 2976 ctrl->rrc(0, BNO055P0_GYR_OFFSET_X_LSB, rsv, 6);
YutaTogashi 0:4092428e9e15 2977
YutaTogashi 0:4092428e9e15 2978 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2979 short offY = (rsv[3] << 8) | rsv[2];
YutaTogashi 0:4092428e9e15 2980 short offZ = (rsv[5] << 8) | rsv[4];
YutaTogashi 0:4092428e9e15 2981 offsetX = (1.0f * offX) * scaleGYRO;
YutaTogashi 0:4092428e9e15 2982 offsetY = (1.0f * offY) * scaleGYRO;
YutaTogashi 0:4092428e9e15 2983 offsetZ = (1.0f * offZ) * scaleGYRO;
YutaTogashi 0:4092428e9e15 2984 }
YutaTogashi 0:4092428e9e15 2985
YutaTogashi 0:4092428e9e15 2986 /* ==================================================================
YutaTogashi 0:4092428e9e15 2987 * 角速度センサーの補正値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 2988 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 2989 * returns:
YutaTogashi 0:4092428e9e15 2990 * X軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 2991 */
YutaTogashi 0:4092428e9e15 2992 float BOARDC_BNO055::getGyroOffsetX(){
YutaTogashi 0:4092428e9e15 2993 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 2994 char rsv[2];
YutaTogashi 0:4092428e9e15 2995 ctrl->rrc(0, BNO055P0_GYR_OFFSET_X_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 2996
YutaTogashi 0:4092428e9e15 2997 short offX = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 2998 return (1.0f * offX) * scaleGYRO;
YutaTogashi 0:4092428e9e15 2999 }
YutaTogashi 0:4092428e9e15 3000
YutaTogashi 0:4092428e9e15 3001 /* ==================================================================
YutaTogashi 0:4092428e9e15 3002 * 角速度センサーの補正値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 3003 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3004 * returns:
YutaTogashi 0:4092428e9e15 3005 * Y軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 3006 */
YutaTogashi 0:4092428e9e15 3007 float BOARDC_BNO055::getGyroOffsetY(){
YutaTogashi 0:4092428e9e15 3008 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 3009 char rsv[2];
YutaTogashi 0:4092428e9e15 3010 ctrl->rrc(0, BNO055P0_GYR_OFFSET_Y_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 3011
YutaTogashi 0:4092428e9e15 3012 short offY = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 3013 return (1.0f * offY) * scaleGYRO;
YutaTogashi 0:4092428e9e15 3014 }
YutaTogashi 0:4092428e9e15 3015
YutaTogashi 0:4092428e9e15 3016 /* ==================================================================
YutaTogashi 0:4092428e9e15 3017 * 角速度センサーの補正値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 3018 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3019 * returns:
YutaTogashi 0:4092428e9e15 3020 * Z軸補正値(スケール乗算済み)
YutaTogashi 0:4092428e9e15 3021 */
YutaTogashi 0:4092428e9e15 3022 float BOARDC_BNO055::getGyroOffsetZ(){
YutaTogashi 0:4092428e9e15 3023 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 3024 char rsv[2];
YutaTogashi 0:4092428e9e15 3025 ctrl->rrc(0, BNO055P0_GYR_OFFSET_Z_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 3026
YutaTogashi 0:4092428e9e15 3027 short offZ = (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 3028 return (1.0f * offZ) * scaleGYRO;
YutaTogashi 0:4092428e9e15 3029 }
YutaTogashi 0:4092428e9e15 3030
YutaTogashi 0:4092428e9e15 3031 /* ==================================================================
YutaTogashi 0:4092428e9e15 3032 * 角速度センサーの補正値を設定する
YutaTogashi 0:4092428e9e15 3033 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3034 * offsetX: スケール乗算済みのX軸の補正値
YutaTogashi 0:4092428e9e15 3035 * offsetY: スケール乗算済みのY軸の補正値
YutaTogashi 0:4092428e9e15 3036 * offsetZ: スケール乗算済みのZ軸の補正値
YutaTogashi 0:4092428e9e15 3037 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3038 * returns:
YutaTogashi 0:4092428e9e15 3039 * -1 失敗
YutaTogashi 0:4092428e9e15 3040 * 1 成功
YutaTogashi 0:4092428e9e15 3041 */
YutaTogashi 0:4092428e9e15 3042 char BOARDC_BNO055::setGyroOffsetAll(float offsetX, float offsetY, float offsetZ){
YutaTogashi 0:4092428e9e15 3043 short offX = (short)((offsetX / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3044 short offY = (short)((offsetY / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3045 short offZ = (short)((offsetZ / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3046 char msg[6];
YutaTogashi 0:4092428e9e15 3047 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 3048 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 3049 msg[2] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 3050 msg[3] = offY >> 8;
YutaTogashi 0:4092428e9e15 3051 msg[4] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 3052 msg[5] = offZ >> 8;
YutaTogashi 0:4092428e9e15 3053
YutaTogashi 0:4092428e9e15 3054 //連続6byte書き込み
YutaTogashi 0:4092428e9e15 3055 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_X_LSB, msg, 6);
YutaTogashi 0:4092428e9e15 3056 }
YutaTogashi 0:4092428e9e15 3057
YutaTogashi 0:4092428e9e15 3058 /* ==================================================================
YutaTogashi 0:4092428e9e15 3059 * 角速度センサーの補正値(X軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3060 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3061 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 3062 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3063 * returns:
YutaTogashi 0:4092428e9e15 3064 * -1 失敗
YutaTogashi 0:4092428e9e15 3065 * 1 成功
YutaTogashi 0:4092428e9e15 3066 */
YutaTogashi 0:4092428e9e15 3067 char BOARDC_BNO055::setGyroOffsetX(float offset){
YutaTogashi 0:4092428e9e15 3068 short offX = (short)((offset / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3069 char msg[2];
YutaTogashi 0:4092428e9e15 3070 msg[0] = offX & 0xFF;
YutaTogashi 0:4092428e9e15 3071 msg[1] = offX >> 8;
YutaTogashi 0:4092428e9e15 3072
YutaTogashi 0:4092428e9e15 3073 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 3074 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_X_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 3075 }
YutaTogashi 0:4092428e9e15 3076
YutaTogashi 0:4092428e9e15 3077 /* ==================================================================
YutaTogashi 0:4092428e9e15 3078 * 角速度センサーの補正値(Y軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3079 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3080 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 3081 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3082 * returns:
YutaTogashi 0:4092428e9e15 3083 * -1 失敗
YutaTogashi 0:4092428e9e15 3084 * 1 成功
YutaTogashi 0:4092428e9e15 3085 */
YutaTogashi 0:4092428e9e15 3086 char BOARDC_BNO055::setGyroOffsetY(float offset){
YutaTogashi 0:4092428e9e15 3087 short offY = (short)((offset / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3088 char msg[2];
YutaTogashi 0:4092428e9e15 3089 msg[0] = offY & 0xFF;
YutaTogashi 0:4092428e9e15 3090 msg[1] = offY >> 8;
YutaTogashi 0:4092428e9e15 3091
YutaTogashi 0:4092428e9e15 3092 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 3093 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_Y_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 3094 }
YutaTogashi 0:4092428e9e15 3095
YutaTogashi 0:4092428e9e15 3096 /* ==================================================================
YutaTogashi 0:4092428e9e15 3097 * 角速度センサーの補正値(Z軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3098 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3099 * offset: スケール乗算済みの補正値
YutaTogashi 0:4092428e9e15 3100 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3101 * returns:
YutaTogashi 0:4092428e9e15 3102 * -1 失敗
YutaTogashi 0:4092428e9e15 3103 * 1 成功
YutaTogashi 0:4092428e9e15 3104 */
YutaTogashi 0:4092428e9e15 3105 char BOARDC_BNO055::setGyroOffsetZ(float offset){
YutaTogashi 0:4092428e9e15 3106 short offZ = (short)((offset / scaleGYRO) + 0.5f);
YutaTogashi 0:4092428e9e15 3107 char msg[2];
YutaTogashi 0:4092428e9e15 3108 msg[0] = offZ & 0xFF;
YutaTogashi 0:4092428e9e15 3109 msg[1] = offZ >> 8;
YutaTogashi 0:4092428e9e15 3110
YutaTogashi 0:4092428e9e15 3111 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 3112 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_Z_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 3113 }
YutaTogashi 0:4092428e9e15 3114
YutaTogashi 0:4092428e9e15 3115 /* ==================================================================
YutaTogashi 0:4092428e9e15 3116 * 加速度センサーのデータ出力範囲[単位:LSB]を取得する
YutaTogashi 0:4092428e9e15 3117 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3118 * returns:
YutaTogashi 0:4092428e9e15 3119 * +-データ計測範囲[単位:LSB]
YutaTogashi 0:4092428e9e15 3120 */
YutaTogashi 0:4092428e9e15 3121 short BOARDC_BNO055::getAccRadius(){
YutaTogashi 0:4092428e9e15 3122 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 3123 char rsv[2];
YutaTogashi 0:4092428e9e15 3124 ctrl->rrc(0, BNO055P0_ACC_RADIUS_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 3125
YutaTogashi 0:4092428e9e15 3126 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 3127 }
YutaTogashi 0:4092428e9e15 3128
YutaTogashi 0:4092428e9e15 3129 /* ==================================================================
YutaTogashi 0:4092428e9e15 3130 * 加速度センサーのデータ出力範囲[単位:LSB]を設定する
YutaTogashi 0:4092428e9e15 3131 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3132 * 引数r: データ計測範囲の最大値および最低値(-r から +r の範囲が計測範囲)
YutaTogashi 0:4092428e9e15 3133 * 最大値は1000[LSB]
YutaTogashi 0:4092428e9e15 3134 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3135 * returns:
YutaTogashi 0:4092428e9e15 3136 * -1 失敗
YutaTogashi 0:4092428e9e15 3137 * 1 成功
YutaTogashi 0:4092428e9e15 3138 */
YutaTogashi 0:4092428e9e15 3139 char BOARDC_BNO055::setAccRadius(short LSB){
YutaTogashi 0:4092428e9e15 3140 if(LSB > 1000) LSB = 1000;
YutaTogashi 0:4092428e9e15 3141
YutaTogashi 0:4092428e9e15 3142 char msg[2];
YutaTogashi 0:4092428e9e15 3143 msg[0] = LSB & 0xFF;
YutaTogashi 0:4092428e9e15 3144 msg[1] = LSB >> 8;
YutaTogashi 0:4092428e9e15 3145
YutaTogashi 0:4092428e9e15 3146 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 3147 return ctrl->wrc(0, BNO055P0_ACC_RADIUS_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 3148 }
YutaTogashi 0:4092428e9e15 3149
YutaTogashi 0:4092428e9e15 3150 /* ==================================================================
YutaTogashi 0:4092428e9e15 3151 * 地磁気センサーのデータ出力範囲[単位:LSB]を取得する
YutaTogashi 0:4092428e9e15 3152 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3153 * returns:
YutaTogashi 0:4092428e9e15 3154 * +-データ計測範囲
YutaTogashi 0:4092428e9e15 3155 */
YutaTogashi 0:4092428e9e15 3156 short BOARDC_BNO055::getMagRadius(){
YutaTogashi 0:4092428e9e15 3157 //連続2byte読み取り
YutaTogashi 0:4092428e9e15 3158 char rsv[2];
YutaTogashi 0:4092428e9e15 3159 ctrl->rrc(0, BNO055P0_MAG_RADIUS_LSB, rsv, 2);
YutaTogashi 0:4092428e9e15 3160
YutaTogashi 0:4092428e9e15 3161 return (rsv[1] << 8) | rsv[0];
YutaTogashi 0:4092428e9e15 3162 }
YutaTogashi 0:4092428e9e15 3163
YutaTogashi 0:4092428e9e15 3164 /* ==================================================================
YutaTogashi 0:4092428e9e15 3165 * 加速度センサーのデータ出力範囲[単位:LSB]を設定する
YutaTogashi 0:4092428e9e15 3166 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3167 * 引数r: データ計測範囲の最大値および最低値(-r から +r の範囲が計測範囲)
YutaTogashi 0:4092428e9e15 3168 * 最大値は960[LSB]
YutaTogashi 0:4092428e9e15 3169 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3170 * returns:
YutaTogashi 0:4092428e9e15 3171 * -1 失敗
YutaTogashi 0:4092428e9e15 3172 * 1 成功
YutaTogashi 0:4092428e9e15 3173 */
YutaTogashi 0:4092428e9e15 3174 char BOARDC_BNO055::setMagRadius(short LSB){
YutaTogashi 0:4092428e9e15 3175 if(LSB > 960) LSB = 960;
YutaTogashi 0:4092428e9e15 3176
YutaTogashi 0:4092428e9e15 3177 char msg[2];
YutaTogashi 0:4092428e9e15 3178 msg[0] = LSB & 0xFF;
YutaTogashi 0:4092428e9e15 3179 msg[1] = LSB >> 8;
YutaTogashi 0:4092428e9e15 3180
YutaTogashi 0:4092428e9e15 3181 //連続2byte書き込み
YutaTogashi 0:4092428e9e15 3182 return ctrl->wrc(0, BNO055P0_MAG_RADIUS_LSB, msg, 2);
YutaTogashi 0:4092428e9e15 3183 }
YutaTogashi 0:4092428e9e15 3184
YutaTogashi 0:4092428e9e15 3185 /* ==================================================================
YutaTogashi 0:4092428e9e15 3186 * 加速度センサー設定のレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3187 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3188 * returns:
YutaTogashi 0:4092428e9e15 3189 * 加速度センサー設定のレジスタ値
YutaTogashi 0:4092428e9e15 3190 */
YutaTogashi 0:4092428e9e15 3191 char BOARDC_BNO055::getAccConfig(){
YutaTogashi 0:4092428e9e15 3192 return ctrl->rr(1, BNO055P1_ACC_CONFIG);
YutaTogashi 0:4092428e9e15 3193 }
YutaTogashi 0:4092428e9e15 3194
YutaTogashi 0:4092428e9e15 3195 /* ==================================================================
YutaTogashi 0:4092428e9e15 3196 * 加速度センサー設定のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3197 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3198 * 引数regVal: 加速度センサー設定のレジスタ値
YutaTogashi 0:4092428e9e15 3199 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3200 * returns:
YutaTogashi 0:4092428e9e15 3201 * -1 失敗
YutaTogashi 0:4092428e9e15 3202 * 1 成功
YutaTogashi 0:4092428e9e15 3203 */
YutaTogashi 0:4092428e9e15 3204 char BOARDC_BNO055::setAccConfig(char regVal){
YutaTogashi 0:4092428e9e15 3205 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3206 }
YutaTogashi 0:4092428e9e15 3207
YutaTogashi 0:4092428e9e15 3208 /* ==================================================================
YutaTogashi 0:4092428e9e15 3209 * 加速度センサー設定のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3210 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3211 * 引数gRange: 加速度センサーの計測範囲
YutaTogashi 0:4092428e9e15 3212 * 引数bandWidth: 加速度センサー出力レート(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3213 * 引数powMode: 加速度センサー電源設定(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3214 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3215 * returns:
YutaTogashi 0:4092428e9e15 3216 * -1 失敗
YutaTogashi 0:4092428e9e15 3217 * 1 成功
YutaTogashi 0:4092428e9e15 3218 */
YutaTogashi 0:4092428e9e15 3219 char BOARDC_BNO055::setAccConfig(char gRange, char bandWidth, char powMode){
YutaTogashi 0:4092428e9e15 3220 char regVal = (powMode << 5) | (bandWidth << 2) | gRange;
YutaTogashi 0:4092428e9e15 3221 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3222 }
YutaTogashi 0:4092428e9e15 3223
YutaTogashi 0:4092428e9e15 3224 /* ==================================================================
YutaTogashi 0:4092428e9e15 3225 * 加速度センサーの計測範囲を設定する
YutaTogashi 0:4092428e9e15 3226 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3227 * 引数G: 加速度センサーの計測範囲(+-2, 4, 8, 16Gのいずれか)
YutaTogashi 0:4092428e9e15 3228 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3229 * returns:
YutaTogashi 0:4092428e9e15 3230 * -1 失敗
YutaTogashi 0:4092428e9e15 3231 * 1 成功
YutaTogashi 0:4092428e9e15 3232 */
YutaTogashi 0:4092428e9e15 3233 char BOARDC_BNO055::setAccRange(unsigned char G){
YutaTogashi 0:4092428e9e15 3234 char val = 0;
YutaTogashi 0:4092428e9e15 3235 switch(G){
YutaTogashi 0:4092428e9e15 3236 case 2:
YutaTogashi 0:4092428e9e15 3237 val = 0x00;
YutaTogashi 0:4092428e9e15 3238 break;
YutaTogashi 0:4092428e9e15 3239 case 4:
YutaTogashi 0:4092428e9e15 3240 val = 0x01;
YutaTogashi 0:4092428e9e15 3241 break;
YutaTogashi 0:4092428e9e15 3242 case 8:
YutaTogashi 0:4092428e9e15 3243 val = 0x02;
YutaTogashi 0:4092428e9e15 3244 break;
YutaTogashi 0:4092428e9e15 3245 case 16:
YutaTogashi 0:4092428e9e15 3246 val = 0x03;
YutaTogashi 0:4092428e9e15 3247 break;
YutaTogashi 0:4092428e9e15 3248 default:
YutaTogashi 0:4092428e9e15 3249 val = 0x02;
YutaTogashi 0:4092428e9e15 3250 }
YutaTogashi 0:4092428e9e15 3251
YutaTogashi 0:4092428e9e15 3252 char regVal = ctrl->rr(1, BNO055P1_ACC_CONFIG);
YutaTogashi 0:4092428e9e15 3253 regVal = (regVal & 0xFC) | val;
YutaTogashi 0:4092428e9e15 3254
YutaTogashi 0:4092428e9e15 3255 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3256 }
YutaTogashi 0:4092428e9e15 3257
YutaTogashi 0:4092428e9e15 3258 /* ==================================================================
YutaTogashi 0:4092428e9e15 3259 * 地磁気センサー設定のレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3260 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3261 * returns:
YutaTogashi 0:4092428e9e15 3262 * 地磁気センサー設定のレジスタ値
YutaTogashi 0:4092428e9e15 3263 */
YutaTogashi 0:4092428e9e15 3264 char BOARDC_BNO055::getMagConfig(){
YutaTogashi 0:4092428e9e15 3265 return ctrl->rr(1, BNO055P1_MAG_CONFIG);
YutaTogashi 0:4092428e9e15 3266 }
YutaTogashi 0:4092428e9e15 3267
YutaTogashi 0:4092428e9e15 3268 /* ==================================================================
YutaTogashi 0:4092428e9e15 3269 * 地磁気センサー設定のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3270 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3271 * 引数regVal: 地磁気センサー設定のレジスタ値
YutaTogashi 0:4092428e9e15 3272 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3273 * returns:
YutaTogashi 0:4092428e9e15 3274 * -1 失敗
YutaTogashi 0:4092428e9e15 3275 * 1 成功
YutaTogashi 0:4092428e9e15 3276 */
YutaTogashi 0:4092428e9e15 3277 char BOARDC_BNO055::setMagConfig(char regVal){
YutaTogashi 0:4092428e9e15 3278 return ctrl->wr(1, BNO055P1_MAG_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3279 }
YutaTogashi 0:4092428e9e15 3280
YutaTogashi 0:4092428e9e15 3281 /* ==================================================================
YutaTogashi 0:4092428e9e15 3282 * 地磁気センサー設定のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3283 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3284 * 引数rate: 地磁気センサー出力レート(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3285 * 引数oprMode: 地磁気センサー出力モード(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3286 * 引数powMode: 地磁気センサー電源設定(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3287 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3288 * returns:
YutaTogashi 0:4092428e9e15 3289 * -1 失敗
YutaTogashi 0:4092428e9e15 3290 * 1 成功
YutaTogashi 0:4092428e9e15 3291 */
YutaTogashi 0:4092428e9e15 3292 char BOARDC_BNO055::setMagConfig(char rate, char oprMode, char powMode){
YutaTogashi 0:4092428e9e15 3293 char regVal = powMode << 5 | oprMode << 3 | rate;
YutaTogashi 0:4092428e9e15 3294 return ctrl->wr(1, BNO055P1_MAG_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3295 }
YutaTogashi 0:4092428e9e15 3296
YutaTogashi 0:4092428e9e15 3297 /* ==================================================================
YutaTogashi 0:4092428e9e15 3298 * 角速度センサー設定(0)のレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3299 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3300 * returns:
YutaTogashi 0:4092428e9e15 3301 * 角速度センサー設定(0)のレジスタ値
YutaTogashi 0:4092428e9e15 3302 */
YutaTogashi 0:4092428e9e15 3303 char BOARDC_BNO055::getGyroConfig_0(){
YutaTogashi 0:4092428e9e15 3304 return ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
YutaTogashi 0:4092428e9e15 3305 }
YutaTogashi 0:4092428e9e15 3306
YutaTogashi 0:4092428e9e15 3307 /* ==================================================================
YutaTogashi 0:4092428e9e15 3308 * 角速度センサー設定(0)のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3309 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3310 * 引数regVal: 角速度センサー設定(0)のレジスタ値
YutaTogashi 0:4092428e9e15 3311 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3312 * returns:
YutaTogashi 0:4092428e9e15 3313 * -1 失敗
YutaTogashi 0:4092428e9e15 3314 * 1 成功
YutaTogashi 0:4092428e9e15 3315 */
YutaTogashi 0:4092428e9e15 3316 char BOARDC_BNO055::setGyroConfig_0(char regVal){
YutaTogashi 0:4092428e9e15 3317 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
YutaTogashi 0:4092428e9e15 3318 }
YutaTogashi 0:4092428e9e15 3319
YutaTogashi 0:4092428e9e15 3320 /* ==================================================================
YutaTogashi 0:4092428e9e15 3321 * 角速度センサー設定(0)のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3322 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3323 * 引数range: 角速度センサーの計測範囲(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3324 * 引数bandWidth: 角速度センサー出力レート(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3325 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3326 * returns:
YutaTogashi 0:4092428e9e15 3327 * -1 失敗
YutaTogashi 0:4092428e9e15 3328 * 1 成功
YutaTogashi 0:4092428e9e15 3329 */
YutaTogashi 0:4092428e9e15 3330 char BOARDC_BNO055::setGyroConfig_0(char range, char bandWidth){
YutaTogashi 0:4092428e9e15 3331 char regVal = bandWidth << 3 | range;
YutaTogashi 0:4092428e9e15 3332 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
YutaTogashi 0:4092428e9e15 3333 }
YutaTogashi 0:4092428e9e15 3334
YutaTogashi 0:4092428e9e15 3335 /* ==================================================================
YutaTogashi 0:4092428e9e15 3336 * 角速度センサー設定(1)のレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3337 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3338 * returns:
YutaTogashi 0:4092428e9e15 3339 * 角速度センサー設定(1)のレジスタ値
YutaTogashi 0:4092428e9e15 3340 */
YutaTogashi 0:4092428e9e15 3341 char BOARDC_BNO055::getGyroConfig_1(){
YutaTogashi 0:4092428e9e15 3342 return ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
YutaTogashi 0:4092428e9e15 3343 }
YutaTogashi 0:4092428e9e15 3344
YutaTogashi 0:4092428e9e15 3345 /* ==================================================================
YutaTogashi 0:4092428e9e15 3346 * 角速度センサー設定(1)のレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3347 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3348 * 引数powMode: 角速度センサーの電源設定(Fusion時は自動設定)
YutaTogashi 0:4092428e9e15 3349 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3350 * returns:
YutaTogashi 0:4092428e9e15 3351 * -1 失敗
YutaTogashi 0:4092428e9e15 3352 * 1 成功
YutaTogashi 0:4092428e9e15 3353 */
YutaTogashi 0:4092428e9e15 3354 char BOARDC_BNO055::setGyroConfig_1(char powMode){
YutaTogashi 0:4092428e9e15 3355 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, powMode & 0x07);
YutaTogashi 0:4092428e9e15 3356 }
YutaTogashi 0:4092428e9e15 3357
YutaTogashi 0:4092428e9e15 3358 /* ==================================================================
YutaTogashi 0:4092428e9e15 3359 * 角速度センサーの計測範囲を設定する
YutaTogashi 0:4092428e9e15 3360 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3361 * 引数G: 角速度センサーの計測範囲(2000, 1000, 500, 250, 125dpsのいずれか)
YutaTogashi 0:4092428e9e15 3362 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3363 * returns:
YutaTogashi 0:4092428e9e15 3364 * -1 失敗
YutaTogashi 0:4092428e9e15 3365 * 1 成功
YutaTogashi 0:4092428e9e15 3366 */
YutaTogashi 0:4092428e9e15 3367 char BOARDC_BNO055::setGyroRange(unsigned short dps){
YutaTogashi 0:4092428e9e15 3368 char val = 0;
YutaTogashi 0:4092428e9e15 3369 switch(dps){
YutaTogashi 0:4092428e9e15 3370 case 2000:
YutaTogashi 0:4092428e9e15 3371 val = 0;
YutaTogashi 0:4092428e9e15 3372 break;
YutaTogashi 0:4092428e9e15 3373 case 1000:
YutaTogashi 0:4092428e9e15 3374 val = 1;
YutaTogashi 0:4092428e9e15 3375 break;
YutaTogashi 0:4092428e9e15 3376 case 500:
YutaTogashi 0:4092428e9e15 3377 val = 2;
YutaTogashi 0:4092428e9e15 3378 break;
YutaTogashi 0:4092428e9e15 3379 case 250:
YutaTogashi 0:4092428e9e15 3380 val = 3;
YutaTogashi 0:4092428e9e15 3381 break;
YutaTogashi 0:4092428e9e15 3382 case 125:
YutaTogashi 0:4092428e9e15 3383 val = 4;
YutaTogashi 0:4092428e9e15 3384 break;
YutaTogashi 0:4092428e9e15 3385 default:
YutaTogashi 0:4092428e9e15 3386 val = 1;
YutaTogashi 0:4092428e9e15 3387 }
YutaTogashi 0:4092428e9e15 3388
YutaTogashi 0:4092428e9e15 3389 char regVal = ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
YutaTogashi 0:4092428e9e15 3390 regVal = (regVal & 0xF8) + val;
YutaTogashi 0:4092428e9e15 3391
YutaTogashi 0:4092428e9e15 3392 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
YutaTogashi 0:4092428e9e15 3393 }
YutaTogashi 0:4092428e9e15 3394
YutaTogashi 0:4092428e9e15 3395 /* ==================================================================
YutaTogashi 0:4092428e9e15 3396 * 加速度センサーのスリープモードのレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3397 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3398 * returns:
YutaTogashi 0:4092428e9e15 3399 * 加速度センサーのスリープモードのレジスタ値
YutaTogashi 0:4092428e9e15 3400 */
YutaTogashi 0:4092428e9e15 3401 char BOARDC_BNO055::getAccSleepConfig(){
YutaTogashi 0:4092428e9e15 3402 return ctrl->rr(1, BNO055P1_ACC_SLEEP_CONFIG);
YutaTogashi 0:4092428e9e15 3403 }
YutaTogashi 0:4092428e9e15 3404
YutaTogashi 0:4092428e9e15 3405 /* ==================================================================
YutaTogashi 0:4092428e9e15 3406 * 加速度センサーのスリープモードのレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3407 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3408 * 引数regVal: 加速度センサーのスリープモードのレジスタ値
YutaTogashi 0:4092428e9e15 3409 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3410 * returns:
YutaTogashi 0:4092428e9e15 3411 * -1 失敗
YutaTogashi 0:4092428e9e15 3412 * 1 成功
YutaTogashi 0:4092428e9e15 3413 */
YutaTogashi 0:4092428e9e15 3414 char BOARDC_BNO055::setAccSleepConfig(char regVal){
YutaTogashi 0:4092428e9e15 3415 return ctrl->wr(1, BNO055P1_ACC_SLEEP_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3416 }
YutaTogashi 0:4092428e9e15 3417
YutaTogashi 0:4092428e9e15 3418 /* ==================================================================
YutaTogashi 0:4092428e9e15 3419 * 加速度センサーのスリープモードのレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3420 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3421 * 引数duration: 加速度センサーのスリープモードの持続閾値
YutaTogashi 0:4092428e9e15 3422 * 引数mode: 加速度センサーのスリープモード選択
YutaTogashi 0:4092428e9e15 3423 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3424 * returns:
YutaTogashi 0:4092428e9e15 3425 * -1 失敗
YutaTogashi 0:4092428e9e15 3426 * 1 成功
YutaTogashi 0:4092428e9e15 3427 */
YutaTogashi 0:4092428e9e15 3428 char BOARDC_BNO055::setAccSleepConfig(char duration, char mode){
YutaTogashi 0:4092428e9e15 3429 char regVal = duration << 1 | mode;
YutaTogashi 0:4092428e9e15 3430 return ctrl->wr(1, BNO055P1_ACC_SLEEP_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3431 }
YutaTogashi 0:4092428e9e15 3432
YutaTogashi 0:4092428e9e15 3433 /* ==================================================================
YutaTogashi 0:4092428e9e15 3434 * 角速度センサーのスリープモードのレジスタ値を取得する
YutaTogashi 0:4092428e9e15 3435 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3436 * returns:
YutaTogashi 0:4092428e9e15 3437 * 角速度センサーのスリープモードのレジスタ値
YutaTogashi 0:4092428e9e15 3438 */
YutaTogashi 0:4092428e9e15 3439 char BOARDC_BNO055::getGyroSleepConfig(){
YutaTogashi 0:4092428e9e15 3440 return ctrl->rr(1, BNO055P1_GYR_SLEEP_CONFIG);
YutaTogashi 0:4092428e9e15 3441 }
YutaTogashi 0:4092428e9e15 3442
YutaTogashi 0:4092428e9e15 3443 /* ==================================================================
YutaTogashi 0:4092428e9e15 3444 * 角速度センサーのスリープモードのレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3445 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3446 * 引数regVal: 角速度センサーのスリープモードのレジスタ値
YutaTogashi 0:4092428e9e15 3447 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3448 * returns:
YutaTogashi 0:4092428e9e15 3449 * -1 失敗
YutaTogashi 0:4092428e9e15 3450 * 1 成功
YutaTogashi 0:4092428e9e15 3451 */
YutaTogashi 0:4092428e9e15 3452 char BOARDC_BNO055::setGyroSleepConfig(char regVal){
YutaTogashi 0:4092428e9e15 3453 return ctrl->wr(1, BNO055P1_GYR_SLEEP_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3454 }
YutaTogashi 0:4092428e9e15 3455
YutaTogashi 0:4092428e9e15 3456 /* ==================================================================
YutaTogashi 0:4092428e9e15 3457 * 角速度センサーのスリープモードのレジスタ値を設定する
YutaTogashi 0:4092428e9e15 3458 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3459 * 引数duration: 角速度センサーの自動スリープモードの持続閾値
YutaTogashi 0:4092428e9e15 3460 * 引数mode: 角速度センサーのスリープモードの持続閾値
YutaTogashi 0:4092428e9e15 3461 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3462 * returns:
YutaTogashi 0:4092428e9e15 3463 * -1 失敗
YutaTogashi 0:4092428e9e15 3464 * 1 成功
YutaTogashi 0:4092428e9e15 3465 */
YutaTogashi 0:4092428e9e15 3466 char BOARDC_BNO055::setGyroSleepConfig(char autoSleepDuration, char duration){
YutaTogashi 0:4092428e9e15 3467 char regVal = autoSleepDuration << 3 | duration;
YutaTogashi 0:4092428e9e15 3468 return ctrl->wr(1, BNO055P1_GYR_SLEEP_CONFIG, regVal);
YutaTogashi 0:4092428e9e15 3469 }
YutaTogashi 0:4092428e9e15 3470
YutaTogashi 0:4092428e9e15 3471 /* ==================================================================
YutaTogashi 0:4092428e9e15 3472 * 各センサーの割り込みフラグ発生のINTピン出力許可設定を取得する
YutaTogashi 0:4092428e9e15 3473 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3474 * returns:
YutaTogashi 0:4092428e9e15 3475 * 各センサーの割り込みフラグ有効無効設定のレジスタ値
YutaTogashi 0:4092428e9e15 3476 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3477 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3478 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3479 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3480 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3481 */
YutaTogashi 0:4092428e9e15 3482 char BOARDC_BNO055::getInterruptMask(){
YutaTogashi 0:4092428e9e15 3483 return ctrl->rr(1, BNO055P1_INT_MSK);
YutaTogashi 0:4092428e9e15 3484 }
YutaTogashi 0:4092428e9e15 3485
YutaTogashi 0:4092428e9e15 3486 /* ==================================================================
YutaTogashi 0:4092428e9e15 3487 * 各センサーの割り込みフラグ発生のINTピン出力許可設定を設定する
YutaTogashi 0:4092428e9e15 3488 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3489 * 引数mask: 各センサーの割り込みフラグ有効無効設定のレジスタ値
YutaTogashi 0:4092428e9e15 3490 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3491 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3492 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3493 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3494 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:許可)
YutaTogashi 0:4092428e9e15 3495 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3496 * returns:
YutaTogashi 0:4092428e9e15 3497 * -1 失敗
YutaTogashi 0:4092428e9e15 3498 * 1 成功
YutaTogashi 0:4092428e9e15 3499 */
YutaTogashi 0:4092428e9e15 3500 char BOARDC_BNO055::setInterruptMask(char mask){
YutaTogashi 0:4092428e9e15 3501 return ctrl->wr(1, BNO055P1_INT_MSK, mask);
YutaTogashi 0:4092428e9e15 3502 }
YutaTogashi 0:4092428e9e15 3503
YutaTogashi 0:4092428e9e15 3504 /* ==================================================================
YutaTogashi 0:4092428e9e15 3505 * 各センサーの割り込みフラグ有効無効設定を取得する
YutaTogashi 0:4092428e9e15 3506 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3507 * returns:
YutaTogashi 0:4092428e9e15 3508 * 各センサーの割り込みフラグ有効無効設定のレジスタ値
YutaTogashi 0:4092428e9e15 3509 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3510 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3511 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3512 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3513 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3514 */
YutaTogashi 0:4092428e9e15 3515 char BOARDC_BNO055::getInterruptEnable(){
YutaTogashi 0:4092428e9e15 3516 return ctrl->rr(1, BNO055P1_INT_EN);
YutaTogashi 0:4092428e9e15 3517 }
YutaTogashi 0:4092428e9e15 3518
YutaTogashi 0:4092428e9e15 3519 /* ==================================================================
YutaTogashi 0:4092428e9e15 3520 * 各センサーの割り込みフラグ有効無効設定を設定する
YutaTogashi 0:4092428e9e15 3521 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3522 * 引数mask: 各センサーの割り込みフラグ有効無効設定のレジスタ値
YutaTogashi 0:4092428e9e15 3523 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3524 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3525 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3526 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3527 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:有効)
YutaTogashi 0:4092428e9e15 3528 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3529 * returns:
YutaTogashi 0:4092428e9e15 3530 * -1 失敗
YutaTogashi 0:4092428e9e15 3531 * 1 成功
YutaTogashi 0:4092428e9e15 3532 */
YutaTogashi 0:4092428e9e15 3533 char BOARDC_BNO055::setInterruptEnable(char mask){
YutaTogashi 0:4092428e9e15 3534 return ctrl->wr(1, BNO055P1_INT_EN, mask);
YutaTogashi 0:4092428e9e15 3535 }
YutaTogashi 0:4092428e9e15 3536
YutaTogashi 0:4092428e9e15 3537 /* ==================================================================
YutaTogashi 0:4092428e9e15 3538 * 加速度センサーのAnyMotion割り込み発生閾値を取得する
YutaTogashi 0:4092428e9e15 3539 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3540 * 引数ismg: 出力する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3541 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3542 * returns:
YutaTogashi 0:4092428e9e15 3543 * 加速度センサーのAnyMotion割り込み発生閾値
YutaTogashi 0:4092428e9e15 3544 */
YutaTogashi 0:4092428e9e15 3545 float BOARDC_BNO055::getAccAnyMotionThreashold(bool ismg){
YutaTogashi 0:4092428e9e15 3546 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3547 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3548
YutaTogashi 0:4092428e9e15 3549 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3550 case 0:
YutaTogashi 0:4092428e9e15 3551 scale = 3.91;
YutaTogashi 0:4092428e9e15 3552 break;
YutaTogashi 0:4092428e9e15 3553 case 1:
YutaTogashi 0:4092428e9e15 3554 scale = 7.81;
YutaTogashi 0:4092428e9e15 3555 break;
YutaTogashi 0:4092428e9e15 3556 case 2:
YutaTogashi 0:4092428e9e15 3557 scale = 15.63;
YutaTogashi 0:4092428e9e15 3558 break;
YutaTogashi 0:4092428e9e15 3559 case 3:
YutaTogashi 0:4092428e9e15 3560 scale = 31.25;
YutaTogashi 0:4092428e9e15 3561 break;
YutaTogashi 0:4092428e9e15 3562 }
YutaTogashi 0:4092428e9e15 3563
YutaTogashi 0:4092428e9e15 3564 scale *= (ismg) ? 1.0 : 9.80665;
YutaTogashi 0:4092428e9e15 3565
YutaTogashi 0:4092428e9e15 3566 return (1.0 * ctrl->rr(1, BNO055P1_ACC_AM_THRES)) * scale;
YutaTogashi 0:4092428e9e15 3567 }
YutaTogashi 0:4092428e9e15 3568
YutaTogashi 0:4092428e9e15 3569 /* ==================================================================
YutaTogashi 0:4092428e9e15 3570 * 加速度センサーのAnyMotion割り込み発生閾値を設定する
YutaTogashi 0:4092428e9e15 3571 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3572 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3573 * 引数threashold: 単位変換済みの閾値
YutaTogashi 0:4092428e9e15 3574 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3575 * returns:
YutaTogashi 0:4092428e9e15 3576 * -1 失敗
YutaTogashi 0:4092428e9e15 3577 * 1 成功
YutaTogashi 0:4092428e9e15 3578 */
YutaTogashi 0:4092428e9e15 3579 char BOARDC_BNO055::setAccAnyMotionThreashold(bool ismg, float threashold){
YutaTogashi 0:4092428e9e15 3580 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3581 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3582
YutaTogashi 0:4092428e9e15 3583 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3584 case 0:
YutaTogashi 0:4092428e9e15 3585 scale = 3.91;
YutaTogashi 0:4092428e9e15 3586 break;
YutaTogashi 0:4092428e9e15 3587 case 1:
YutaTogashi 0:4092428e9e15 3588 scale = 7.81;
YutaTogashi 0:4092428e9e15 3589 break;
YutaTogashi 0:4092428e9e15 3590 case 2:
YutaTogashi 0:4092428e9e15 3591 scale = 15.63;
YutaTogashi 0:4092428e9e15 3592 break;
YutaTogashi 0:4092428e9e15 3593 case 3:
YutaTogashi 0:4092428e9e15 3594 scale = 31.25;
YutaTogashi 0:4092428e9e15 3595 break;
YutaTogashi 0:4092428e9e15 3596 }
YutaTogashi 0:4092428e9e15 3597
YutaTogashi 0:4092428e9e15 3598 scale *= (ismg) ? 1.0 : 9.8;
YutaTogashi 0:4092428e9e15 3599
YutaTogashi 0:4092428e9e15 3600 char cTh = (char)((threashold / scale) + 0.5);
YutaTogashi 0:4092428e9e15 3601
YutaTogashi 0:4092428e9e15 3602 return ctrl->wr(1, BNO055P1_ACC_AM_THRES, cTh);
YutaTogashi 0:4092428e9e15 3603 }
YutaTogashi 0:4092428e9e15 3604
YutaTogashi 0:4092428e9e15 3605 /* ==================================================================
YutaTogashi 0:4092428e9e15 3606 * 加速度センサーの割り込み使用設定を取得する
YutaTogashi 0:4092428e9e15 3607 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3608 * returns:
YutaTogashi 0:4092428e9e15 3609 * 0bit目,1bit目 連続発生閾値([1bit目+0bit目+1]回の発生でフラグON)
YutaTogashi 0:4092428e9e15 3610 * 2bit目 AM/NM_X_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3611 * 3bit目 AM/NM_Y_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3612 * 4bit目 AM/NM_Z_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3613 * 5bit目 HG_X_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3614 * 6bit目 HG_Y_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3615 * 7bit目 HG_Z_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3616 */
YutaTogashi 0:4092428e9e15 3617 char BOARDC_BNO055::getAccInterruptSettings(){
YutaTogashi 0:4092428e9e15 3618 return ctrl->rr(1, BNO055P1_ACC_INT_SETTINGS);
YutaTogashi 0:4092428e9e15 3619 }
YutaTogashi 0:4092428e9e15 3620
YutaTogashi 0:4092428e9e15 3621 /* ==================================================================
YutaTogashi 0:4092428e9e15 3622 * 加速度センサーの割り込み使用設定を設定する
YutaTogashi 0:4092428e9e15 3623 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3624 * 引数settings:
YutaTogashi 0:4092428e9e15 3625 * 0bit目,1bit目 連続発生閾値([1bit目+0bit目+1]回の発生でフラグON)
YutaTogashi 0:4092428e9e15 3626 * 2bit目 AM/NM_X_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3627 * 3bit目 AM/NM_Y_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3628 * 4bit目 AM/NM_Z_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3629 * 5bit目 HG_X_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3630 * 6bit目 HG_Y_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3631 * 7bit目 HG_Z_AXISトリガー使用(0:使用しない, 1:使用する)
YutaTogashi 0:4092428e9e15 3632 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3633 * returns:
YutaTogashi 0:4092428e9e15 3634 * -1 失敗
YutaTogashi 0:4092428e9e15 3635 * 1 成功
YutaTogashi 0:4092428e9e15 3636 */
YutaTogashi 0:4092428e9e15 3637 char BOARDC_BNO055::setAccInterruptSettings(char settings){
YutaTogashi 0:4092428e9e15 3638 return ctrl->wr(1, BNO055P1_ACC_INT_SETTINGS, settings);
YutaTogashi 0:4092428e9e15 3639 }
YutaTogashi 0:4092428e9e15 3640
YutaTogashi 0:4092428e9e15 3641 /* ==================================================================
YutaTogashi 0:4092428e9e15 3642 * 加速度センサーのHighG割り込み閾値を取得する
YutaTogashi 0:4092428e9e15 3643 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3644 * returns:
YutaTogashi 0:4092428e9e15 3645 * HighG割り込み発生閾値[単位:ミリ秒](2ms - 512ms)
YutaTogashi 0:4092428e9e15 3646 */
YutaTogashi 0:4092428e9e15 3647 unsigned short BOARDC_BNO055::getAccHighGduration(){
YutaTogashi 0:4092428e9e15 3648 return (ctrl->rr(1, BNO055P1_ACC_HG_DURATION) + 1) << 1;
YutaTogashi 0:4092428e9e15 3649 }
YutaTogashi 0:4092428e9e15 3650
YutaTogashi 0:4092428e9e15 3651 /* ==================================================================
YutaTogashi 0:4092428e9e15 3652 * 加速度センサーのHighG割り込み継続発生閾値を設定する
YutaTogashi 0:4092428e9e15 3653 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3654 * 引数ms: HighG割り込み継続発生閾値[単位:ミリ秒](2ms - 512ms)
YutaTogashi 0:4092428e9e15 3655 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3656 * returns:
YutaTogashi 0:4092428e9e15 3657 * -1 失敗
YutaTogashi 0:4092428e9e15 3658 * 1 成功
YutaTogashi 0:4092428e9e15 3659 */
YutaTogashi 0:4092428e9e15 3660 char BOARDC_BNO055::setAccHighGduration(short ms){
YutaTogashi 0:4092428e9e15 3661 if(ms > 512 || ms < 2) return -1;
YutaTogashi 0:4092428e9e15 3662
YutaTogashi 0:4092428e9e15 3663 ms = (ms >> 1) - 1;
YutaTogashi 0:4092428e9e15 3664
YutaTogashi 0:4092428e9e15 3665 return ctrl->wr(1, BNO055P1_ACC_HG_DURATION, ms & 0xFF);
YutaTogashi 0:4092428e9e15 3666 }
YutaTogashi 0:4092428e9e15 3667
YutaTogashi 0:4092428e9e15 3668 /* ==================================================================
YutaTogashi 0:4092428e9e15 3669 * 加速度センサーのHighG割り込み発生閾値を取得する
YutaTogashi 0:4092428e9e15 3670 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3671 * 引数ismg: 出力する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3672 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3673 * returns:
YutaTogashi 0:4092428e9e15 3674 * HighG割り込み発生閾値
YutaTogashi 0:4092428e9e15 3675 */
YutaTogashi 0:4092428e9e15 3676 float BOARDC_BNO055::getAccHighGThreashold(bool ismg){
YutaTogashi 0:4092428e9e15 3677 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3678 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3679
YutaTogashi 0:4092428e9e15 3680 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3681 case 0:
YutaTogashi 0:4092428e9e15 3682 scale = 7.81;
YutaTogashi 0:4092428e9e15 3683 break;
YutaTogashi 0:4092428e9e15 3684 case 1:
YutaTogashi 0:4092428e9e15 3685 scale = 15.63;
YutaTogashi 0:4092428e9e15 3686 break;
YutaTogashi 0:4092428e9e15 3687 case 2:
YutaTogashi 0:4092428e9e15 3688 scale = 31.25;
YutaTogashi 0:4092428e9e15 3689 break;
YutaTogashi 0:4092428e9e15 3690 case 3:
YutaTogashi 0:4092428e9e15 3691 scale = 62.5;
YutaTogashi 0:4092428e9e15 3692 break;
YutaTogashi 0:4092428e9e15 3693 }
YutaTogashi 0:4092428e9e15 3694
YutaTogashi 0:4092428e9e15 3695 scale *= (ismg) ? 1.0 : 9.8;
YutaTogashi 0:4092428e9e15 3696
YutaTogashi 0:4092428e9e15 3697 return (1.0 * ctrl->rr(1, BNO055P1_ACC_HG_THRES)) * scale;
YutaTogashi 0:4092428e9e15 3698 }
YutaTogashi 0:4092428e9e15 3699
YutaTogashi 0:4092428e9e15 3700 /* ==================================================================
YutaTogashi 0:4092428e9e15 3701 * 加速度センサーのHighG割り込み発生閾値を設定する
YutaTogashi 0:4092428e9e15 3702 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3703 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3704 * 引数threashold: 単位変換済みの閾値
YutaTogashi 0:4092428e9e15 3705 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3706 * returns:
YutaTogashi 0:4092428e9e15 3707 * -1 失敗
YutaTogashi 0:4092428e9e15 3708 * 1 成功
YutaTogashi 0:4092428e9e15 3709 */
YutaTogashi 0:4092428e9e15 3710 char BOARDC_BNO055::setAccHighGThreashold(bool ismg, float threashold){
YutaTogashi 0:4092428e9e15 3711 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3712 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3713
YutaTogashi 0:4092428e9e15 3714 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3715 case 0:
YutaTogashi 0:4092428e9e15 3716 scale = 7.81;
YutaTogashi 0:4092428e9e15 3717 break;
YutaTogashi 0:4092428e9e15 3718 case 1:
YutaTogashi 0:4092428e9e15 3719 scale = 15.63;
YutaTogashi 0:4092428e9e15 3720 break;
YutaTogashi 0:4092428e9e15 3721 case 2:
YutaTogashi 0:4092428e9e15 3722 scale = 31.25;
YutaTogashi 0:4092428e9e15 3723 break;
YutaTogashi 0:4092428e9e15 3724 case 3:
YutaTogashi 0:4092428e9e15 3725 scale = 62.5;
YutaTogashi 0:4092428e9e15 3726 break;
YutaTogashi 0:4092428e9e15 3727 }
YutaTogashi 0:4092428e9e15 3728
YutaTogashi 0:4092428e9e15 3729 scale *= (ismg) ? 1.0 : 9.8;
YutaTogashi 0:4092428e9e15 3730
YutaTogashi 0:4092428e9e15 3731 char cTh = (char)((threashold / scale) + 0.5);
YutaTogashi 0:4092428e9e15 3732
YutaTogashi 0:4092428e9e15 3733 return ctrl->wr(1, BNO055P1_ACC_HG_THRES, cTh);
YutaTogashi 0:4092428e9e15 3734 }
YutaTogashi 0:4092428e9e15 3735
YutaTogashi 0:4092428e9e15 3736 /* ==================================================================
YutaTogashi 0:4092428e9e15 3737 * 加速度センサーのNoMotion割り込み発生閾値を取得する
YutaTogashi 0:4092428e9e15 3738 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3739 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3740 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3741 * returns:
YutaTogashi 0:4092428e9e15 3742 * NoMotion割り込み発生閾値
YutaTogashi 0:4092428e9e15 3743 */
YutaTogashi 0:4092428e9e15 3744 float BOARDC_BNO055::getAccNMThreashold(bool ismg){
YutaTogashi 0:4092428e9e15 3745 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3746 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3747
YutaTogashi 0:4092428e9e15 3748 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3749 case 0:
YutaTogashi 0:4092428e9e15 3750 scale = 3.91;
YutaTogashi 0:4092428e9e15 3751 break;
YutaTogashi 0:4092428e9e15 3752 case 1:
YutaTogashi 0:4092428e9e15 3753 scale = 7.81;
YutaTogashi 0:4092428e9e15 3754 break;
YutaTogashi 0:4092428e9e15 3755 case 2:
YutaTogashi 0:4092428e9e15 3756 scale = 15.63;
YutaTogashi 0:4092428e9e15 3757 break;
YutaTogashi 0:4092428e9e15 3758 case 3:
YutaTogashi 0:4092428e9e15 3759 scale = 31.25;
YutaTogashi 0:4092428e9e15 3760 break;
YutaTogashi 0:4092428e9e15 3761 }
YutaTogashi 0:4092428e9e15 3762
YutaTogashi 0:4092428e9e15 3763 scale *= (ismg) ? 1.0 : 9.8;
YutaTogashi 0:4092428e9e15 3764
YutaTogashi 0:4092428e9e15 3765 return (1.0 * ctrl->rr(1, BNO055P1_ACC_NM_THRES)) * scale;
YutaTogashi 0:4092428e9e15 3766 }
YutaTogashi 0:4092428e9e15 3767
YutaTogashi 0:4092428e9e15 3768 /* ==================================================================
YutaTogashi 0:4092428e9e15 3769 * 加速度センサーのNoMotion割り込み発生閾値を設定する
YutaTogashi 0:4092428e9e15 3770 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3771 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
YutaTogashi 0:4092428e9e15 3772 * 引数threashold: 単位変換済みの閾値
YutaTogashi 0:4092428e9e15 3773 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3774 * returns:
YutaTogashi 0:4092428e9e15 3775 * -1 失敗
YutaTogashi 0:4092428e9e15 3776 * 1 成功
YutaTogashi 0:4092428e9e15 3777 */
YutaTogashi 0:4092428e9e15 3778 char BOARDC_BNO055::setAccNMThreashold(bool ismg, float threashold){
YutaTogashi 0:4092428e9e15 3779 char rc = getAccConfig();
YutaTogashi 0:4092428e9e15 3780 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 3781
YutaTogashi 0:4092428e9e15 3782 switch(rc & 0x03){
YutaTogashi 0:4092428e9e15 3783 case 0:
YutaTogashi 0:4092428e9e15 3784 scale = 3.91;
YutaTogashi 0:4092428e9e15 3785 break;
YutaTogashi 0:4092428e9e15 3786 case 1:
YutaTogashi 0:4092428e9e15 3787 scale = 7.81;
YutaTogashi 0:4092428e9e15 3788 break;
YutaTogashi 0:4092428e9e15 3789 case 2:
YutaTogashi 0:4092428e9e15 3790 scale = 15.63;
YutaTogashi 0:4092428e9e15 3791 break;
YutaTogashi 0:4092428e9e15 3792 case 3:
YutaTogashi 0:4092428e9e15 3793 scale = 31.25;
YutaTogashi 0:4092428e9e15 3794 break;
YutaTogashi 0:4092428e9e15 3795 }
YutaTogashi 0:4092428e9e15 3796
YutaTogashi 0:4092428e9e15 3797 scale *= (ismg) ? 1.0 : 9.8;
YutaTogashi 0:4092428e9e15 3798
YutaTogashi 0:4092428e9e15 3799 char cTh = (char)((threashold / scale) + 0.5);
YutaTogashi 0:4092428e9e15 3800
YutaTogashi 0:4092428e9e15 3801 return ctrl->wr(1, BNO055P1_ACC_NM_THRES, cTh);
YutaTogashi 0:4092428e9e15 3802 }
YutaTogashi 0:4092428e9e15 3803
YutaTogashi 0:4092428e9e15 3804 /* ==================================================================
YutaTogashi 0:4092428e9e15 3805 * 加速度センサーのNoMotion割り込み設定を取得する
YutaTogashi 0:4092428e9e15 3806 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3807 * returns:
YutaTogashi 0:4092428e9e15 3808 * NoMotion割り込み設定値
YutaTogashi 0:4092428e9e15 3809 * 1bit目: スローモーション、ノーモーション選択(0:NoMotion, 1:SlowMotion)
YutaTogashi 0:4092428e9e15 3810 * 2 - 7bit目: slo_no_mot _dur設定値(データシート参照)
YutaTogashi 0:4092428e9e15 3811 */
YutaTogashi 0:4092428e9e15 3812 char BOARDC_BNO055::getAccNMsetting(){
YutaTogashi 0:4092428e9e15 3813 return ctrl->rr(1, BNO055P1_ACC_NM_SET);
YutaTogashi 0:4092428e9e15 3814 }
YutaTogashi 0:4092428e9e15 3815
YutaTogashi 0:4092428e9e15 3816 /* ==================================================================
YutaTogashi 0:4092428e9e15 3817 * 加速度センサーのNoMotion割り込み設定を設定する
YutaTogashi 0:4092428e9e15 3818 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3819 * 引数setting: NoMotion割り込み設定値
YutaTogashi 0:4092428e9e15 3820 * 1bit目: スローモーション、ノーモーション選択(0:NoMotion, 1:SlowMotion)
YutaTogashi 0:4092428e9e15 3821 * 2 - 7bit目: slo_no_mot _dur設定値(データシート参照)
YutaTogashi 0:4092428e9e15 3822 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3823 * returns:
YutaTogashi 0:4092428e9e15 3824 * -1 失敗
YutaTogashi 0:4092428e9e15 3825 * 1 成功
YutaTogashi 0:4092428e9e15 3826 */
YutaTogashi 0:4092428e9e15 3827 char BOARDC_BNO055::setAccNMsetting(char setting){
YutaTogashi 0:4092428e9e15 3828 return ctrl->wr(1, BNO055P1_ACC_NM_SET, setting);
YutaTogashi 0:4092428e9e15 3829 }
YutaTogashi 0:4092428e9e15 3830
YutaTogashi 0:4092428e9e15 3831 /* ==================================================================
YutaTogashi 0:4092428e9e15 3832 * 角速度センサーの割り込み設定を取得する
YutaTogashi 0:4092428e9e15 3833 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3834 * returns:
YutaTogashi 0:4092428e9e15 3835 * 角速度センサーの割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 3836 */
YutaTogashi 0:4092428e9e15 3837 char BOARDC_BNO055::getGyroInterruptSettings(){
YutaTogashi 0:4092428e9e15 3838 return ctrl->rr(1, BNO055P1_GYR_INT_SETING);
YutaTogashi 0:4092428e9e15 3839 }
YutaTogashi 0:4092428e9e15 3840
YutaTogashi 0:4092428e9e15 3841 /* ==================================================================
YutaTogashi 0:4092428e9e15 3842 * 角速度センサーの割り込み設定を設定する
YutaTogashi 0:4092428e9e15 3843 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3844 * 引数setting: 角速度センサーの割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 3845 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3846 * returns:
YutaTogashi 0:4092428e9e15 3847 * -1 失敗
YutaTogashi 0:4092428e9e15 3848 * 1 成功
YutaTogashi 0:4092428e9e15 3849 */
YutaTogashi 0:4092428e9e15 3850 char BOARDC_BNO055::setGyroInterruptSettings(char settings){
YutaTogashi 0:4092428e9e15 3851 return ctrl->wr(1, BNO055P1_GYR_INT_SETING, settings);
YutaTogashi 0:4092428e9e15 3852 }
YutaTogashi 0:4092428e9e15 3853
YutaTogashi 0:4092428e9e15 3854 /* ==================================================================
YutaTogashi 0:4092428e9e15 3855 * 角速度センサーのHighRate割り込み設定(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 3856 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3857 * 引数setting: 角速度センサーの割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 3858 */
YutaTogashi 0:4092428e9e15 3859 char BOARDC_BNO055::getGyroHighRateXsetting(){
YutaTogashi 0:4092428e9e15 3860 return ctrl->rr(1, BNO055P1_GYR_HR_X_SET);
YutaTogashi 0:4092428e9e15 3861 }
YutaTogashi 0:4092428e9e15 3862
YutaTogashi 0:4092428e9e15 3863 /* ==================================================================
YutaTogashi 0:4092428e9e15 3864 * 角速度センサーのHighRate割り込み設定(X軸のみ、実際の値)を取得する
YutaTogashi 0:4092428e9e15 3865 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3866 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
YutaTogashi 0:4092428e9e15 3867 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
YutaTogashi 0:4092428e9e15 3868 */
YutaTogashi 0:4092428e9e15 3869 void BOARDC_BNO055::getGyroHighRateXsetting_dps(float &hyst, float &thres){
YutaTogashi 0:4092428e9e15 3870 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 3871 hyst = 0.0f;
YutaTogashi 0:4092428e9e15 3872 thres = 0.0f;
YutaTogashi 0:4092428e9e15 3873
YutaTogashi 0:4092428e9e15 3874 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 3875 case 0:
YutaTogashi 0:4092428e9e15 3876 hyst = 62.26;
YutaTogashi 0:4092428e9e15 3877 thres = 62.5;
YutaTogashi 0:4092428e9e15 3878 break;
YutaTogashi 0:4092428e9e15 3879 case 1:
YutaTogashi 0:4092428e9e15 3880 hyst = 31.13;
YutaTogashi 0:4092428e9e15 3881 thres = 31.25;
YutaTogashi 0:4092428e9e15 3882 break;
YutaTogashi 0:4092428e9e15 3883 case 2:
YutaTogashi 0:4092428e9e15 3884 hyst = 15.56;
YutaTogashi 0:4092428e9e15 3885 thres = 15.62;
YutaTogashi 0:4092428e9e15 3886 break;
YutaTogashi 0:4092428e9e15 3887 case 3:
YutaTogashi 0:4092428e9e15 3888 hyst = 7.78;
YutaTogashi 0:4092428e9e15 3889 thres = 7.81;
YutaTogashi 0:4092428e9e15 3890 break;
YutaTogashi 0:4092428e9e15 3891 case 4:
YutaTogashi 0:4092428e9e15 3892 hyst = 3.89;
YutaTogashi 0:4092428e9e15 3893 thres = 3.90;
YutaTogashi 0:4092428e9e15 3894 break;
YutaTogashi 0:4092428e9e15 3895 }
YutaTogashi 0:4092428e9e15 3896
YutaTogashi 0:4092428e9e15 3897 char val = ctrl->rr(1, BNO055P1_GYR_HR_X_SET);
YutaTogashi 0:4092428e9e15 3898
YutaTogashi 0:4092428e9e15 3899 hyst *= (float)((val & 0x60) * 1.0);
YutaTogashi 0:4092428e9e15 3900 thres *= (float)((val & 0x1F) * 1.0);
YutaTogashi 0:4092428e9e15 3901 }
YutaTogashi 0:4092428e9e15 3902
YutaTogashi 0:4092428e9e15 3903 /* ==================================================================
YutaTogashi 0:4092428e9e15 3904 * 角速度センサーのHighRate割り込み設定(X軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3905 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3906 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 3907 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3908 * returns:
YutaTogashi 0:4092428e9e15 3909 * -1 失敗
YutaTogashi 0:4092428e9e15 3910 * 1 成功
YutaTogashi 0:4092428e9e15 3911 */
YutaTogashi 0:4092428e9e15 3912 char BOARDC_BNO055::setGyroHighRateXsetting(char setting){
YutaTogashi 0:4092428e9e15 3913 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, setting);
YutaTogashi 0:4092428e9e15 3914 }
YutaTogashi 0:4092428e9e15 3915
YutaTogashi 0:4092428e9e15 3916 /* ==================================================================
YutaTogashi 0:4092428e9e15 3917 * 角速度センサーのHighRate割り込み設定(X軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3918 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3919 * 引数hystVal: ヒステリシス
YutaTogashi 0:4092428e9e15 3920 * 引数thresVal: スレッショルド
YutaTogashi 0:4092428e9e15 3921 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3922 * returns:
YutaTogashi 0:4092428e9e15 3923 * -1 失敗
YutaTogashi 0:4092428e9e15 3924 * 1 成功
YutaTogashi 0:4092428e9e15 3925 */
YutaTogashi 0:4092428e9e15 3926 char BOARDC_BNO055::setGyroHighRateXsetting_dps(float hystVal, float thresVal){
YutaTogashi 0:4092428e9e15 3927 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 3928 float hyst = 0.0f;
YutaTogashi 0:4092428e9e15 3929 float thres = 0.0f;
YutaTogashi 0:4092428e9e15 3930
YutaTogashi 0:4092428e9e15 3931 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 3932 case 0:
YutaTogashi 0:4092428e9e15 3933 hyst = 62.26;
YutaTogashi 0:4092428e9e15 3934 thres = 62.5;
YutaTogashi 0:4092428e9e15 3935 break;
YutaTogashi 0:4092428e9e15 3936 case 1:
YutaTogashi 0:4092428e9e15 3937 hyst = 31.13;
YutaTogashi 0:4092428e9e15 3938 thres = 31.25;
YutaTogashi 0:4092428e9e15 3939 break;
YutaTogashi 0:4092428e9e15 3940 case 2:
YutaTogashi 0:4092428e9e15 3941 hyst = 15.56;
YutaTogashi 0:4092428e9e15 3942 thres = 15.62;
YutaTogashi 0:4092428e9e15 3943 break;
YutaTogashi 0:4092428e9e15 3944 case 3:
YutaTogashi 0:4092428e9e15 3945 hyst = 7.78;
YutaTogashi 0:4092428e9e15 3946 thres = 7.81;
YutaTogashi 0:4092428e9e15 3947 break;
YutaTogashi 0:4092428e9e15 3948 case 4:
YutaTogashi 0:4092428e9e15 3949 hyst = 3.89;
YutaTogashi 0:4092428e9e15 3950 thres = 3.90;
YutaTogashi 0:4092428e9e15 3951 break;
YutaTogashi 0:4092428e9e15 3952 }
YutaTogashi 0:4092428e9e15 3953
YutaTogashi 0:4092428e9e15 3954 char hystChar = (char)((hystVal / hyst) + 0.5);
YutaTogashi 0:4092428e9e15 3955 char thresChar = (char)((thresVal / thres) + 0.5);
YutaTogashi 0:4092428e9e15 3956
YutaTogashi 0:4092428e9e15 3957 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, ((hystChar << 5) | thresChar));
YutaTogashi 0:4092428e9e15 3958 }
YutaTogashi 0:4092428e9e15 3959
YutaTogashi 0:4092428e9e15 3960 /* ==================================================================
YutaTogashi 0:4092428e9e15 3961 * 角速度センサーのHighRate割り込み継続発生閾値(X軸のみ)を取得する
YutaTogashi 0:4092428e9e15 3962 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3963 * returns:
YutaTogashi 0:4092428e9e15 3964 * HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 3965 */
YutaTogashi 0:4092428e9e15 3966 float BOARDC_BNO055::getGyroHighRateXduration(){
YutaTogashi 0:4092428e9e15 3967 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_X)) * 2.5;
YutaTogashi 0:4092428e9e15 3968 }
YutaTogashi 0:4092428e9e15 3969
YutaTogashi 0:4092428e9e15 3970 /* ==================================================================
YutaTogashi 0:4092428e9e15 3971 * 角速度センサーのHighRate割り込み継続発生閾値(X軸のみ)を設定する
YutaTogashi 0:4092428e9e15 3972 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3973 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 3974 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3975 * returns:
YutaTogashi 0:4092428e9e15 3976 * -1 失敗
YutaTogashi 0:4092428e9e15 3977 * 1 成功
YutaTogashi 0:4092428e9e15 3978 */
YutaTogashi 0:4092428e9e15 3979 char BOARDC_BNO055::setGyroHighRateXduration(float duration){
YutaTogashi 0:4092428e9e15 3980 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
YutaTogashi 0:4092428e9e15 3981 }
YutaTogashi 0:4092428e9e15 3982
YutaTogashi 0:4092428e9e15 3983 /* ==================================================================
YutaTogashi 0:4092428e9e15 3984 * 角速度センサーのHighRate割り込み設定(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 3985 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3986 * returns:
YutaTogashi 0:4092428e9e15 3987 * 角速度センサーのHighRate割り込み設定
YutaTogashi 0:4092428e9e15 3988 */
YutaTogashi 0:4092428e9e15 3989 char BOARDC_BNO055::getGyroHighRateYsetting(){
YutaTogashi 0:4092428e9e15 3990 return ctrl->rr(1, BNO055P1_GYR_HR_Y_SET);
YutaTogashi 0:4092428e9e15 3991 }
YutaTogashi 0:4092428e9e15 3992
YutaTogashi 0:4092428e9e15 3993 /* ==================================================================
YutaTogashi 0:4092428e9e15 3994 * 角速度センサーのHighRate割り込み設定(Y軸のみ、実際の値)を取得する
YutaTogashi 0:4092428e9e15 3995 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 3996 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
YutaTogashi 0:4092428e9e15 3997 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
YutaTogashi 0:4092428e9e15 3998 */
YutaTogashi 0:4092428e9e15 3999 void BOARDC_BNO055::getGyroHighRateYsetting_dps(float &hyst, float &thres){
YutaTogashi 0:4092428e9e15 4000 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4001 hyst = 0.0f;
YutaTogashi 0:4092428e9e15 4002 thres = 0.0f;
YutaTogashi 0:4092428e9e15 4003
YutaTogashi 0:4092428e9e15 4004 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4005 case 0:
YutaTogashi 0:4092428e9e15 4006 hyst = 62.26;
YutaTogashi 0:4092428e9e15 4007 thres = 62.5;
YutaTogashi 0:4092428e9e15 4008 break;
YutaTogashi 0:4092428e9e15 4009 case 1:
YutaTogashi 0:4092428e9e15 4010 hyst = 31.13;
YutaTogashi 0:4092428e9e15 4011 thres = 31.25;
YutaTogashi 0:4092428e9e15 4012 break;
YutaTogashi 0:4092428e9e15 4013 case 2:
YutaTogashi 0:4092428e9e15 4014 hyst = 15.56;
YutaTogashi 0:4092428e9e15 4015 thres = 15.62;
YutaTogashi 0:4092428e9e15 4016 break;
YutaTogashi 0:4092428e9e15 4017 case 3:
YutaTogashi 0:4092428e9e15 4018 hyst = 7.78;
YutaTogashi 0:4092428e9e15 4019 thres = 7.81;
YutaTogashi 0:4092428e9e15 4020 break;
YutaTogashi 0:4092428e9e15 4021 case 4:
YutaTogashi 0:4092428e9e15 4022 hyst = 3.89;
YutaTogashi 0:4092428e9e15 4023 thres = 3.90;
YutaTogashi 0:4092428e9e15 4024 break;
YutaTogashi 0:4092428e9e15 4025 }
YutaTogashi 0:4092428e9e15 4026
YutaTogashi 0:4092428e9e15 4027 char val = ctrl->rr(1, BNO055P1_GYR_HR_Y_SET);
YutaTogashi 0:4092428e9e15 4028
YutaTogashi 0:4092428e9e15 4029 hyst *= (float)((val & 0x60) * 1.0);
YutaTogashi 0:4092428e9e15 4030 thres *= (float)((val & 0x1F) * 1.0);
YutaTogashi 0:4092428e9e15 4031 }
YutaTogashi 0:4092428e9e15 4032
YutaTogashi 0:4092428e9e15 4033 /* ==================================================================
YutaTogashi 0:4092428e9e15 4034 * 角速度センサーのHighRate割り込み設定(Y軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4035 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4036 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 4037 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4038 * returns:
YutaTogashi 0:4092428e9e15 4039 * -1 失敗
YutaTogashi 0:4092428e9e15 4040 * 1 成功
YutaTogashi 0:4092428e9e15 4041 */
YutaTogashi 0:4092428e9e15 4042 char BOARDC_BNO055::setGyroHighRateYsetting(char setting){
YutaTogashi 0:4092428e9e15 4043 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, setting);
YutaTogashi 0:4092428e9e15 4044 }
YutaTogashi 0:4092428e9e15 4045
YutaTogashi 0:4092428e9e15 4046 /* ==================================================================
YutaTogashi 0:4092428e9e15 4047 * 角速度センサーのHighRate割り込み設定(Y軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4048 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4049 * 引数hystVal: ヒステリシス
YutaTogashi 0:4092428e9e15 4050 * 引数thresVal: スレッショルド
YutaTogashi 0:4092428e9e15 4051 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4052 * returns:
YutaTogashi 0:4092428e9e15 4053 * -1 失敗
YutaTogashi 0:4092428e9e15 4054 * 1 成功
YutaTogashi 0:4092428e9e15 4055 */
YutaTogashi 0:4092428e9e15 4056 char BOARDC_BNO055::setGyroHighRateYsetting_dps(float hystVal, float thresVal){
YutaTogashi 0:4092428e9e15 4057 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4058 float hyst = 0.0f;
YutaTogashi 0:4092428e9e15 4059 float thres = 0.0f;
YutaTogashi 0:4092428e9e15 4060
YutaTogashi 0:4092428e9e15 4061 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4062 case 0:
YutaTogashi 0:4092428e9e15 4063 hyst = 62.26;
YutaTogashi 0:4092428e9e15 4064 thres = 62.5;
YutaTogashi 0:4092428e9e15 4065 break;
YutaTogashi 0:4092428e9e15 4066 case 1:
YutaTogashi 0:4092428e9e15 4067 hyst = 31.13;
YutaTogashi 0:4092428e9e15 4068 thres = 31.25;
YutaTogashi 0:4092428e9e15 4069 break;
YutaTogashi 0:4092428e9e15 4070 case 2:
YutaTogashi 0:4092428e9e15 4071 hyst = 15.56;
YutaTogashi 0:4092428e9e15 4072 thres = 15.62;
YutaTogashi 0:4092428e9e15 4073 break;
YutaTogashi 0:4092428e9e15 4074 case 3:
YutaTogashi 0:4092428e9e15 4075 hyst = 7.78;
YutaTogashi 0:4092428e9e15 4076 thres = 7.81;
YutaTogashi 0:4092428e9e15 4077 break;
YutaTogashi 0:4092428e9e15 4078 case 4:
YutaTogashi 0:4092428e9e15 4079 hyst = 3.89;
YutaTogashi 0:4092428e9e15 4080 thres = 3.90;
YutaTogashi 0:4092428e9e15 4081 break;
YutaTogashi 0:4092428e9e15 4082 }
YutaTogashi 0:4092428e9e15 4083
YutaTogashi 0:4092428e9e15 4084 char hystChar = (char)((hystVal / hyst) + 0.5);
YutaTogashi 0:4092428e9e15 4085 char thresChar = (char)((thresVal / thres) + 0.5);
YutaTogashi 0:4092428e9e15 4086
YutaTogashi 0:4092428e9e15 4087 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, ((hystChar << 5) | thresChar));
YutaTogashi 0:4092428e9e15 4088 }
YutaTogashi 0:4092428e9e15 4089
YutaTogashi 0:4092428e9e15 4090 /* ==================================================================
YutaTogashi 0:4092428e9e15 4091 * 角速度センサーのHighRate割り込み継続発生閾値(Y軸のみ)を取得する
YutaTogashi 0:4092428e9e15 4092 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4093 * returns:
YutaTogashi 0:4092428e9e15 4094 * HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 4095 */
YutaTogashi 0:4092428e9e15 4096 float BOARDC_BNO055::getGyroHighRateYduration(){
YutaTogashi 0:4092428e9e15 4097 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_Y)) * 2.5;
YutaTogashi 0:4092428e9e15 4098 }
YutaTogashi 0:4092428e9e15 4099
YutaTogashi 0:4092428e9e15 4100 /* ==================================================================
YutaTogashi 0:4092428e9e15 4101 * 角速度センサーのHighRate割り込み継続発生閾値(Y軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4102 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4103 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 4104 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4105 * returns:
YutaTogashi 0:4092428e9e15 4106 * -1 失敗
YutaTogashi 0:4092428e9e15 4107 * 1 成功
YutaTogashi 0:4092428e9e15 4108 */
YutaTogashi 0:4092428e9e15 4109 char BOARDC_BNO055::setGyroHighRateYduration(float duration){
YutaTogashi 0:4092428e9e15 4110 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
YutaTogashi 0:4092428e9e15 4111 }
YutaTogashi 0:4092428e9e15 4112
YutaTogashi 0:4092428e9e15 4113 /* ==================================================================
YutaTogashi 0:4092428e9e15 4114 * 角速度センサーのHighRate割り込み設定(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 4115 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4116 * returns:
YutaTogashi 0:4092428e9e15 4117 * 角速度センサーのHighRate割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 4118 */
YutaTogashi 0:4092428e9e15 4119 char BOARDC_BNO055::getGyroHighRateZsetting(){
YutaTogashi 0:4092428e9e15 4120 return ctrl->rr(1, BNO055P1_GYR_HR_Z_SET);
YutaTogashi 0:4092428e9e15 4121 }
YutaTogashi 0:4092428e9e15 4122
YutaTogashi 0:4092428e9e15 4123 /* ==================================================================
YutaTogashi 0:4092428e9e15 4124 * 角速度センサーのHighRate割り込み設定(Z軸のみ、実際の値)を取得する
YutaTogashi 0:4092428e9e15 4125 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4126 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
YutaTogashi 0:4092428e9e15 4127 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
YutaTogashi 0:4092428e9e15 4128 */
YutaTogashi 0:4092428e9e15 4129 void BOARDC_BNO055::getGyroHighRateZsetting_dps(float &hyst, float &thres){
YutaTogashi 0:4092428e9e15 4130 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4131 hyst = 0.0f;
YutaTogashi 0:4092428e9e15 4132 thres = 0.0f;
YutaTogashi 0:4092428e9e15 4133
YutaTogashi 0:4092428e9e15 4134 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4135 case 0:
YutaTogashi 0:4092428e9e15 4136 hyst = 62.26;
YutaTogashi 0:4092428e9e15 4137 thres = 62.5;
YutaTogashi 0:4092428e9e15 4138 break;
YutaTogashi 0:4092428e9e15 4139 case 1:
YutaTogashi 0:4092428e9e15 4140 hyst = 31.13;
YutaTogashi 0:4092428e9e15 4141 thres = 31.25;
YutaTogashi 0:4092428e9e15 4142 break;
YutaTogashi 0:4092428e9e15 4143 case 2:
YutaTogashi 0:4092428e9e15 4144 hyst = 15.56;
YutaTogashi 0:4092428e9e15 4145 thres = 15.62;
YutaTogashi 0:4092428e9e15 4146 break;
YutaTogashi 0:4092428e9e15 4147 case 3:
YutaTogashi 0:4092428e9e15 4148 hyst = 7.78;
YutaTogashi 0:4092428e9e15 4149 thres = 7.81;
YutaTogashi 0:4092428e9e15 4150 break;
YutaTogashi 0:4092428e9e15 4151 case 4:
YutaTogashi 0:4092428e9e15 4152 hyst = 3.89;
YutaTogashi 0:4092428e9e15 4153 thres = 3.90;
YutaTogashi 0:4092428e9e15 4154 break;
YutaTogashi 0:4092428e9e15 4155 }
YutaTogashi 0:4092428e9e15 4156
YutaTogashi 0:4092428e9e15 4157 char val = ctrl->rr(1, BNO055P1_GYR_HR_Z_SET);
YutaTogashi 0:4092428e9e15 4158
YutaTogashi 0:4092428e9e15 4159 hyst *= (float)((val & 0x60) * 1.0);
YutaTogashi 0:4092428e9e15 4160 thres *= (float)((val & 0x1F) * 1.0);
YutaTogashi 0:4092428e9e15 4161 }
YutaTogashi 0:4092428e9e15 4162
YutaTogashi 0:4092428e9e15 4163 /* ==================================================================
YutaTogashi 0:4092428e9e15 4164 * 角速度センサーのHighRate割り込み設定(Z軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4165 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4166 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 4167 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4168 * returns:
YutaTogashi 0:4092428e9e15 4169 * -1 失敗
YutaTogashi 0:4092428e9e15 4170 * 1 成功
YutaTogashi 0:4092428e9e15 4171 */
YutaTogashi 0:4092428e9e15 4172 char BOARDC_BNO055::setGyroHighRateZsetting(char setting){
YutaTogashi 0:4092428e9e15 4173 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, setting);
YutaTogashi 0:4092428e9e15 4174 }
YutaTogashi 0:4092428e9e15 4175
YutaTogashi 0:4092428e9e15 4176 /* ==================================================================
YutaTogashi 0:4092428e9e15 4177 * 角速度センサーのHighRate割り込み設定(Z軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4178 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4179 * 引数hystVal: ヒステリシス
YutaTogashi 0:4092428e9e15 4180 * 引数thresVal: スレッショルド
YutaTogashi 0:4092428e9e15 4181 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4182 * returns:
YutaTogashi 0:4092428e9e15 4183 * -1 失敗
YutaTogashi 0:4092428e9e15 4184 * 1 成功
YutaTogashi 0:4092428e9e15 4185 */
YutaTogashi 0:4092428e9e15 4186 char BOARDC_BNO055::setGyroHighRateZsetting_dps(float hystVal, float thresVal){
YutaTogashi 0:4092428e9e15 4187 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4188 float hyst = 0.0f;
YutaTogashi 0:4092428e9e15 4189 float thres = 0.0f;
YutaTogashi 0:4092428e9e15 4190
YutaTogashi 0:4092428e9e15 4191 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4192 case 0:
YutaTogashi 0:4092428e9e15 4193 hyst = 62.26;
YutaTogashi 0:4092428e9e15 4194 thres = 62.5;
YutaTogashi 0:4092428e9e15 4195 break;
YutaTogashi 0:4092428e9e15 4196 case 1:
YutaTogashi 0:4092428e9e15 4197 hyst = 31.13;
YutaTogashi 0:4092428e9e15 4198 thres = 31.25;
YutaTogashi 0:4092428e9e15 4199 break;
YutaTogashi 0:4092428e9e15 4200 case 2:
YutaTogashi 0:4092428e9e15 4201 hyst = 15.56;
YutaTogashi 0:4092428e9e15 4202 thres = 15.62;
YutaTogashi 0:4092428e9e15 4203 break;
YutaTogashi 0:4092428e9e15 4204 case 3:
YutaTogashi 0:4092428e9e15 4205 hyst = 7.78;
YutaTogashi 0:4092428e9e15 4206 thres = 7.81;
YutaTogashi 0:4092428e9e15 4207 break;
YutaTogashi 0:4092428e9e15 4208 case 4:
YutaTogashi 0:4092428e9e15 4209 hyst = 3.89;
YutaTogashi 0:4092428e9e15 4210 thres = 3.90;
YutaTogashi 0:4092428e9e15 4211 break;
YutaTogashi 0:4092428e9e15 4212 }
YutaTogashi 0:4092428e9e15 4213
YutaTogashi 0:4092428e9e15 4214 char hystChar = (char)((hystVal / hyst) + 0.5);
YutaTogashi 0:4092428e9e15 4215 char thresChar = (char)((thresVal / thres) + 0.5);
YutaTogashi 0:4092428e9e15 4216
YutaTogashi 0:4092428e9e15 4217 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, ((hystChar << 5) | thresChar));
YutaTogashi 0:4092428e9e15 4218 }
YutaTogashi 0:4092428e9e15 4219
YutaTogashi 0:4092428e9e15 4220 /* ==================================================================
YutaTogashi 0:4092428e9e15 4221 * 角速度センサーのHighRate割り込み継続発生閾値(Z軸のみ)を取得する
YutaTogashi 0:4092428e9e15 4222 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4223 * returns:
YutaTogashi 0:4092428e9e15 4224 * HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 4225 */
YutaTogashi 0:4092428e9e15 4226 float BOARDC_BNO055::getGyroHighRateZduration(){
YutaTogashi 0:4092428e9e15 4227 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_Z)) * 2.5;
YutaTogashi 0:4092428e9e15 4228 }
YutaTogashi 0:4092428e9e15 4229
YutaTogashi 0:4092428e9e15 4230 /* ==================================================================
YutaTogashi 0:4092428e9e15 4231 * 角速度センサーのHighRate割り込み継続発生閾値(Z軸のみ)を設定する
YutaTogashi 0:4092428e9e15 4232 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4233 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
YutaTogashi 0:4092428e9e15 4234 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4235 * returns:
YutaTogashi 0:4092428e9e15 4236 * -1 失敗
YutaTogashi 0:4092428e9e15 4237 * 1 成功
YutaTogashi 0:4092428e9e15 4238 */
YutaTogashi 0:4092428e9e15 4239 char BOARDC_BNO055::setGyroHighRateZduration(float duration){
YutaTogashi 0:4092428e9e15 4240 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
YutaTogashi 0:4092428e9e15 4241 }
YutaTogashi 0:4092428e9e15 4242
YutaTogashi 0:4092428e9e15 4243 /* ==================================================================
YutaTogashi 0:4092428e9e15 4244 * 角速度センサーのAnyMotion割り込み閾値を取得する
YutaTogashi 0:4092428e9e15 4245 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4246 * returns:
YutaTogashi 0:4092428e9e15 4247 * AnyMotion割り込み閾値[単位:dps]
YutaTogashi 0:4092428e9e15 4248 */
YutaTogashi 0:4092428e9e15 4249 float BOARDC_BNO055::getGyroAnyMotionThreashold(){
YutaTogashi 0:4092428e9e15 4250 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4251 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 4252
YutaTogashi 0:4092428e9e15 4253 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4254 case 0:
YutaTogashi 0:4092428e9e15 4255 scale = 1.0f;
YutaTogashi 0:4092428e9e15 4256 break;
YutaTogashi 0:4092428e9e15 4257 case 1:
YutaTogashi 0:4092428e9e15 4258 scale = 0.5;
YutaTogashi 0:4092428e9e15 4259 break;
YutaTogashi 0:4092428e9e15 4260 case 2:
YutaTogashi 0:4092428e9e15 4261 scale = 0.25;
YutaTogashi 0:4092428e9e15 4262 break;
YutaTogashi 0:4092428e9e15 4263 case 3:
YutaTogashi 0:4092428e9e15 4264 scale = 0.125;
YutaTogashi 0:4092428e9e15 4265 break;
YutaTogashi 0:4092428e9e15 4266 case 4:
YutaTogashi 0:4092428e9e15 4267 scale = 0.0625;
YutaTogashi 0:4092428e9e15 4268 break;
YutaTogashi 0:4092428e9e15 4269 }
YutaTogashi 0:4092428e9e15 4270
YutaTogashi 0:4092428e9e15 4271 return (1.0f * ctrl->rr(1, BNO055P1_GYR_AM_THRES)) * scale;
YutaTogashi 0:4092428e9e15 4272 }
YutaTogashi 0:4092428e9e15 4273
YutaTogashi 0:4092428e9e15 4274 /* ==================================================================
YutaTogashi 0:4092428e9e15 4275 * 角速度センサーのAnyMotion割り込み閾値を設定する
YutaTogashi 0:4092428e9e15 4276 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4277 * 引数threashold: AnyMotion割り込み閾値[単位:dps]
YutaTogashi 0:4092428e9e15 4278 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4279 * returns:
YutaTogashi 0:4092428e9e15 4280 * -1 失敗
YutaTogashi 0:4092428e9e15 4281 * 1 成功
YutaTogashi 0:4092428e9e15 4282 */
YutaTogashi 0:4092428e9e15 4283 char BOARDC_BNO055::setGyroAnyMotionThreashold(float threashold){
YutaTogashi 0:4092428e9e15 4284 char r = getGyroConfig_0();
YutaTogashi 0:4092428e9e15 4285 float scale = 0.0f;
YutaTogashi 0:4092428e9e15 4286
YutaTogashi 0:4092428e9e15 4287 switch(r & 0x07){
YutaTogashi 0:4092428e9e15 4288 case 0:
YutaTogashi 0:4092428e9e15 4289 scale = 1.0f;
YutaTogashi 0:4092428e9e15 4290 break;
YutaTogashi 0:4092428e9e15 4291 case 1:
YutaTogashi 0:4092428e9e15 4292 scale = 0.5;
YutaTogashi 0:4092428e9e15 4293 break;
YutaTogashi 0:4092428e9e15 4294 case 2:
YutaTogashi 0:4092428e9e15 4295 scale = 0.25;
YutaTogashi 0:4092428e9e15 4296 break;
YutaTogashi 0:4092428e9e15 4297 case 3:
YutaTogashi 0:4092428e9e15 4298 scale = 0.125;
YutaTogashi 0:4092428e9e15 4299 break;
YutaTogashi 0:4092428e9e15 4300 case 4:
YutaTogashi 0:4092428e9e15 4301 scale = 0.0625;
YutaTogashi 0:4092428e9e15 4302 break;
YutaTogashi 0:4092428e9e15 4303 }
YutaTogashi 0:4092428e9e15 4304
YutaTogashi 0:4092428e9e15 4305 return ctrl->wr(1, BNO055P1_GYR_AM_THRES, (char)((threashold / scale) + 0.5));
YutaTogashi 0:4092428e9e15 4306 }
YutaTogashi 0:4092428e9e15 4307
YutaTogashi 0:4092428e9e15 4308 /* ==================================================================
YutaTogashi 0:4092428e9e15 4309 * 加速度センサーのAnyMotion割り込み閾値を取得する
YutaTogashi 0:4092428e9e15 4310 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4311 * returns:
YutaTogashi 0:4092428e9e15 4312 * AnyMotion割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 4313 */
YutaTogashi 0:4092428e9e15 4314 char BOARDC_BNO055::getAccAnyMotionSetting(){
YutaTogashi 0:4092428e9e15 4315 return ctrl->rr(1, BNO055P1_GYR_AM_SET);
YutaTogashi 0:4092428e9e15 4316 }
YutaTogashi 0:4092428e9e15 4317
YutaTogashi 0:4092428e9e15 4318 /* ==================================================================
YutaTogashi 0:4092428e9e15 4319 * 加速度センサーのAnyMotion割り込み閾値を設定する
YutaTogashi 0:4092428e9e15 4320 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4321 * 引数setting: AnyMotion割り込み設定レジスタ値
YutaTogashi 0:4092428e9e15 4322 * ------------------------------------------------------------------
YutaTogashi 0:4092428e9e15 4323 * returns:
YutaTogashi 0:4092428e9e15 4324 * -1 失敗
YutaTogashi 0:4092428e9e15 4325 * 1 成功
YutaTogashi 0:4092428e9e15 4326 */
YutaTogashi 0:4092428e9e15 4327 char BOARDC_BNO055::setAccAnyMotionSetting(char setting){
YutaTogashi 0:4092428e9e15 4328 return ctrl->wr(1, BNO055P1_GYR_AM_SET, setting);
YutaTogashi 0:4092428e9e15 4329 }
YutaTogashi 0:4092428e9e15 4330
YutaTogashi 0:4092428e9e15 4331