BNO055をI2CとUARTで使用するためのライブラリ。UARTはmbedにて不安定なため使用できるボードとできないボードがある模様。

Dependents:   BNO055_BME280_ Yabusame2_gyro GRhanawaizman test_deg_read

Committer:
Yajirushi
Date:
Tue Nov 29 02:57:08 2016 +0000
Revision:
0:3807ce385b2a
Child:
1:7dbc931127c0
Child:
2:e8bc1ae2c20c
FIRST COMMIT

Who changed what in which revision?

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