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

Dependents:   BNO055_BME280_ Yabusame2_gyro GRhanawaizman test_deg_read

Committer:
Yajirushi
Date:
Mon May 13 14:46:38 2019 +0000
Revision:
5:64b033b30802
Parent:
4:9efb4abafd2e
change comment

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 3:363ec3772dce 48 char BNO055_CTRL::rrc(bool isPage1, char startRegAddr, unsigned 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 3:363ec3772dce 175 char BNO055_UART_CTRL::rrc(bool isPage1, char startRegAddr, unsigned 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 3:363ec3772dce 500 char BNO055_I2C_CTRL::rrc(bool isPage1, char startRegAddr, unsigned 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 3:363ec3772dce 514 iface->read(i2c_readAddr, (char *)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 4:9efb4abafd2e 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 3:363ec3772dce 730 char BOARDC_BNO055::customReadC(bool isPage1, char startRegAddr, unsigned 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 3:363ec3772dce 801 unsigned 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 3:363ec3772dce 880 unsigned 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 3:363ec3772dce 893 unsigned 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 3:363ec3772dce 904 unsigned 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 3:363ec3772dce 915 unsigned 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 3:363ec3772dce 930 unsigned 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 3:363ec3772dce 943 unsigned 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 3:363ec3772dce 954 unsigned 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 3:363ec3772dce 965 unsigned 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 3:363ec3772dce 980 unsigned 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 3:363ec3772dce 993 unsigned 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 3:363ec3772dce 1004 unsigned 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 3:363ec3772dce 1015 unsigned 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 1:7dbc931127c0 1024 * Roll軸およびPitch軸が+-45degの範囲を超える場合、Yaw軸の値は不安定となる
Yajirushi 1:7dbc931127c0 1025 * (その場合はgetEulerFromQを使用することで四元数からオイラー角を導出可能)
Yajirushi 0:3807ce385b2a 1026 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1027 * &E_heading: アドレス参照引数:関数実行後、この変数にYaw軸(heading)の値が格納される
Yajirushi 0:3807ce385b2a 1028 * &E_roll: アドレス参照引数:関数実行後、この変数にroll軸の値が格納される
Yajirushi 0:3807ce385b2a 1029 * &E_pitch: アドレス参照引数:関数実行後、この変数にpitch軸の値が格納される
Yajirushi 0:3807ce385b2a 1030 */
Yajirushi 0:3807ce385b2a 1031 void BOARDC_BNO055::getEulerDataAll(short &E_heading, short &E_roll, short &E_pitch){
Yajirushi 0:3807ce385b2a 1032 //連続6byte読み取り
Yajirushi 3:363ec3772dce 1033 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 1034 ctrl->rrc(0, BNO055P0_EUL_HEADING_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 1035
Yajirushi 0:3807ce385b2a 1036 E_heading = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1037 E_roll = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1038 E_pitch = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1039 }
Yajirushi 0:3807ce385b2a 1040
Yajirushi 0:3807ce385b2a 1041 /* ==================================================================
Yajirushi 0:3807ce385b2a 1042 * FusionSensing:オイラー角の値(Yaw軸(heading)のみ)を取得する
Yajirushi 0:3807ce385b2a 1043 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 0:3807ce385b2a 1044 */
Yajirushi 0:3807ce385b2a 1045 short BOARDC_BNO055::getEulerDataHeading(){
Yajirushi 0:3807ce385b2a 1046 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1047 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1048 ctrl->rrc(0, BNO055P0_EUL_HEADING_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1049
Yajirushi 0:3807ce385b2a 1050 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1051 }
Yajirushi 0:3807ce385b2a 1052
Yajirushi 0:3807ce385b2a 1053 /* ==================================================================
Yajirushi 0:3807ce385b2a 1054 * getEulerDataHeading()のエイリアス
Yajirushi 0:3807ce385b2a 1055 * FusionSensing:オイラー角の値(Yaw軸(heading)のみ)を返す
Yajirushi 0:3807ce385b2a 1056 */
Yajirushi 0:3807ce385b2a 1057 short BOARDC_BNO055::getEulerDataYaw(){
Yajirushi 0:3807ce385b2a 1058 return getEulerDataHeading();
Yajirushi 0:3807ce385b2a 1059 }
Yajirushi 0:3807ce385b2a 1060
Yajirushi 0:3807ce385b2a 1061 /* ==================================================================
Yajirushi 0:3807ce385b2a 1062 * FusionSensing:オイラー角の値(pitch軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1063 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 0:3807ce385b2a 1064 */
Yajirushi 0:3807ce385b2a 1065 short BOARDC_BNO055::getEulerDataRoll(){
Yajirushi 0:3807ce385b2a 1066 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1067 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1068 ctrl->rrc(0, BNO055P0_EUL_ROLL_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1069
Yajirushi 0:3807ce385b2a 1070 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1071 }
Yajirushi 0:3807ce385b2a 1072
Yajirushi 0:3807ce385b2a 1073 /* ==================================================================
Yajirushi 0:3807ce385b2a 1074 * FusionSensing:オイラー角の値(pitch軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1075 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 0:3807ce385b2a 1076 */
Yajirushi 0:3807ce385b2a 1077 short BOARDC_BNO055::getEulerDataPitch(){
Yajirushi 0:3807ce385b2a 1078 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1079 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1080 ctrl->rrc(0, BNO055P0_EUL_PITCH_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1081
Yajirushi 0:3807ce385b2a 1082 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1083 }
Yajirushi 0:3807ce385b2a 1084
Yajirushi 0:3807ce385b2a 1085 /* ==================================================================
Yajirushi 0:3807ce385b2a 1086 * FusionSensing:9軸センサーのすべての値の値を取得する
Yajirushi 0:3807ce385b2a 1087 */
Yajirushi 0:3807ce385b2a 1088 void BOARDC_BNO055::get9Axis(short *box){
Yajirushi 3:363ec3772dce 1089 unsigned char rsv[18];
Yajirushi 0:3807ce385b2a 1090 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 18);
Yajirushi 0:3807ce385b2a 1091
Yajirushi 0:3807ce385b2a 1092 box[0] = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1093 box[1] = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1094 box[2] = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1095 box[3] = (rsv[7] << 8) | rsv[6];
Yajirushi 0:3807ce385b2a 1096 box[4] = (rsv[9] << 8) | rsv[8];
Yajirushi 0:3807ce385b2a 1097 box[5] = (rsv[11] << 8) | rsv[10];
Yajirushi 0:3807ce385b2a 1098 box[6] = (rsv[13] << 8) | rsv[12];
Yajirushi 0:3807ce385b2a 1099 box[7] = (rsv[15] << 8) | rsv[14];
Yajirushi 0:3807ce385b2a 1100 box[8] = (rsv[17] << 8) | rsv[16];
Yajirushi 0:3807ce385b2a 1101 }
Yajirushi 0:3807ce385b2a 1102
Yajirushi 0:3807ce385b2a 1103 /* ==================================================================
Yajirushi 0:3807ce385b2a 1104 * FusionSensing:9軸センサーのすべての値とオイラー角のすべての値を取得する
Yajirushi 0:3807ce385b2a 1105 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 0:3807ce385b2a 1106 */
Yajirushi 0:3807ce385b2a 1107 void BOARDC_BNO055::get9AxisAndEUL(short *box){
Yajirushi 3:363ec3772dce 1108 unsigned char rsv[24];
Yajirushi 0:3807ce385b2a 1109 ctrl->rrc(0, BNO055P0_ACC_DATA_X_LSB, rsv, 24);
Yajirushi 0:3807ce385b2a 1110
Yajirushi 0:3807ce385b2a 1111 box[0] = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1112 box[1] = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1113 box[2] = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1114 box[3] = (rsv[7] << 8) | rsv[6];
Yajirushi 0:3807ce385b2a 1115 box[4] = (rsv[9] << 8) | rsv[8];
Yajirushi 0:3807ce385b2a 1116 box[5] = (rsv[11] << 8) | rsv[10];
Yajirushi 0:3807ce385b2a 1117 box[6] = (rsv[13] << 8) | rsv[12];
Yajirushi 0:3807ce385b2a 1118 box[7] = (rsv[15] << 8) | rsv[14];
Yajirushi 0:3807ce385b2a 1119 box[8] = (rsv[17] << 8) | rsv[16];
Yajirushi 0:3807ce385b2a 1120 box[9] = (rsv[19] << 8) | rsv[18];
Yajirushi 0:3807ce385b2a 1121 box[10] = (rsv[21] << 8) | rsv[20];
Yajirushi 0:3807ce385b2a 1122 box[11] = (rsv[23] << 8) | rsv[22];
Yajirushi 0:3807ce385b2a 1123 }
Yajirushi 0:3807ce385b2a 1124
Yajirushi 0:3807ce385b2a 1125 /* ==================================================================
Yajirushi 0:3807ce385b2a 1126 * FusionSensing:四元数(Quaternion)を取得する
Yajirushi 0:3807ce385b2a 1127 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 0:3807ce385b2a 1128 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1129 * &q1, &q2, &q3, &q4:アドレス参照引数:関数実行後、この変数に四元数が格納される
Yajirushi 0:3807ce385b2a 1130 */
Yajirushi 0:3807ce385b2a 1131 void BOARDC_BNO055::getQuaternion(short &q1, short &q2, short &q3, short &q4){
Yajirushi 0:3807ce385b2a 1132 //連続8byte読み取り
Yajirushi 3:363ec3772dce 1133 unsigned char rsv[8];
Yajirushi 0:3807ce385b2a 1134 ctrl->rrc(0, BNO055P0_QUA_DATA_W_LSB, rsv, 8);
Yajirushi 0:3807ce385b2a 1135
Yajirushi 0:3807ce385b2a 1136 q1 = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1137 q2 = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1138 q3 = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1139 q4 = (rsv[7] << 8) | rsv[6];
Yajirushi 0:3807ce385b2a 1140 }
Yajirushi 0:3807ce385b2a 1141
Yajirushi 0:3807ce385b2a 1142 /* ==================================================================
Yajirushi 1:7dbc931127c0 1143 * FusionSensing:四元数(Quaternion)を取得し、オイラー角を算出して返す
Yajirushi 1:7dbc931127c0 1144 * FusionSensing機能(内部演算機能)を使用していない場合は不定の値を返す
Yajirushi 1:7dbc931127c0 1145 * 出力数値範囲 -180.0 to 180.0[deg] CW(時計回り)- CCW(反時計回り)+
Yajirushi 1:7dbc931127c0 1146 * ------------------------------------------------------------------
Yajirushi 1:7dbc931127c0 1147 * &E_heading, &E_roll, &E_pitch:アドレス参照引数:関数実行後、この変数にオイラー角が格納される
Yajirushi 1:7dbc931127c0 1148 */
Yajirushi 1:7dbc931127c0 1149 void BOARDC_BNO055::getEulerFromQ(double &E_heading, double &E_roll, double &E_pitch){
Yajirushi 1:7dbc931127c0 1150 //連続8byte読み取り
Yajirushi 3:363ec3772dce 1151 unsigned char rsv[8];
Yajirushi 1:7dbc931127c0 1152 ctrl->rrc(0, BNO055P0_QUA_DATA_W_LSB, rsv, 8);
Yajirushi 1:7dbc931127c0 1153
Yajirushi 1:7dbc931127c0 1154 //四元数を実際の数値に変換(1 / 2^14を掛けるより2^14で割ったほうが早い・・・)
Yajirushi 1:7dbc931127c0 1155 double q1, q2, q3, q4;
Yajirushi 1:7dbc931127c0 1156 q1 = (double)((short)((rsv[1] << 8) | rsv[0]) / 16384.0);
Yajirushi 1:7dbc931127c0 1157 q2 = (double)((short)((rsv[3] << 8) | rsv[2]) / 16384.0);
Yajirushi 1:7dbc931127c0 1158 q3 = (double)((short)((rsv[5] << 8) | rsv[4]) / 16384.0);
Yajirushi 1:7dbc931127c0 1159 q4 = (double)((short)((rsv[7] << 8) | rsv[6]) / 16384.0);
Yajirushi 1:7dbc931127c0 1160
Yajirushi 1:7dbc931127c0 1161 //四元数からオイラー角に変換
Yajirushi 1:7dbc931127c0 1162 //ref: Wikipedia
Yajirushi 1:7dbc931127c0 1163 //Conversion between quaternions and Euler angles(Quaternion to Euler Angles Conversion)
Yajirushi 4:9efb4abafd2e 1164 // 2019/05/13: 記事中のRollとPitchの軸の説明が逆であるため修正
Yajirushi 1:7dbc931127c0 1165 double q3q3 = q3 * q3;
Yajirushi 1:7dbc931127c0 1166
Yajirushi 5:64b033b30802 1167 //X-axis rotation
Yajirushi 1:7dbc931127c0 1168 double m1 = +2.0 * (q1 * q2 + q3 * q4);
Yajirushi 1:7dbc931127c0 1169 double m2 = +1.0 - 2.0 * (q2 * q2 + q3q3);
Yajirushi 4:9efb4abafd2e 1170 E_pitch = atan2(m1, m2) * 57.2957795131;
Yajirushi 1:7dbc931127c0 1171
Yajirushi 5:64b033b30802 1172 //Y-axis rotation
Yajirushi 1:7dbc931127c0 1173 m1 = +2.0 * (q1 * q3 - q4 * q2);
Yajirushi 1:7dbc931127c0 1174 m1 = (m1 > 1.0)? 1.0 : m1;
Yajirushi 1:7dbc931127c0 1175 m1 = (m1 < -1.0)? -1.0 : m1;
Yajirushi 4:9efb4abafd2e 1176 E_roll = asin(m1) * 57.2957795131;
Yajirushi 1:7dbc931127c0 1177
Yajirushi 4:9efb4abafd2e 1178 //Z-axis rotation
Yajirushi 1:7dbc931127c0 1179 m1 = +2.0 * (q1 * q4 + q2 * q3);
Yajirushi 1:7dbc931127c0 1180 m2 = +1.0 - 2.0 * (q3q3 + q4 * q4);
Yajirushi 1:7dbc931127c0 1181 E_heading = atan2(m1, m2) * 57.2957795131;
Yajirushi 1:7dbc931127c0 1182 }
Yajirushi 1:7dbc931127c0 1183
Yajirushi 1:7dbc931127c0 1184 /* ==================================================================
Yajirushi 0:3807ce385b2a 1185 * 線形加速度(LinearAcceleration)での加速度センサの値を取得する
Yajirushi 0:3807ce385b2a 1186 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1187 * &L_accX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
Yajirushi 0:3807ce385b2a 1188 * &L_accY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
Yajirushi 0:3807ce385b2a 1189 * &L_accZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
Yajirushi 0:3807ce385b2a 1190 */
Yajirushi 0:3807ce385b2a 1191 void BOARDC_BNO055::getLinearAccDataAll(short &L_accX, short &L_accY, short &L_accZ){
Yajirushi 0:3807ce385b2a 1192 //連続6byte読み取り
Yajirushi 3:363ec3772dce 1193 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 1194 ctrl->rrc(0, BNO055P0_LIA_DATA_X_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 1195
Yajirushi 0:3807ce385b2a 1196 L_accX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1197 L_accY = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1198 L_accZ = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1199 }
Yajirushi 0:3807ce385b2a 1200
Yajirushi 0:3807ce385b2a 1201 /* ==================================================================
Yajirushi 0:3807ce385b2a 1202 * 線形加速度(LinearAcceleration)での加速度センサの値(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1203 */
Yajirushi 0:3807ce385b2a 1204 short BOARDC_BNO055::getLinearAccDataX(){
Yajirushi 0:3807ce385b2a 1205 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1206 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1207 ctrl->rrc(0, BNO055P0_LIA_DATA_X_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1208
Yajirushi 0:3807ce385b2a 1209 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1210 }
Yajirushi 0:3807ce385b2a 1211
Yajirushi 0:3807ce385b2a 1212 /* ==================================================================
Yajirushi 0:3807ce385b2a 1213 * 線形加速度(LinearAcceleration)での加速度センサの値(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1214 */
Yajirushi 0:3807ce385b2a 1215 short BOARDC_BNO055::getLinearAccDataY(){
Yajirushi 0:3807ce385b2a 1216 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1217 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1218 ctrl->rrc(0, BNO055P0_LIA_DATA_Y_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1219
Yajirushi 0:3807ce385b2a 1220 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1221 }
Yajirushi 0:3807ce385b2a 1222
Yajirushi 0:3807ce385b2a 1223 /* ==================================================================
Yajirushi 0:3807ce385b2a 1224 * 線形加速度(LinearAcceleration)での加速度センサの値(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1225 */
Yajirushi 0:3807ce385b2a 1226 short BOARDC_BNO055::getLinearAccDataZ(){
Yajirushi 0:3807ce385b2a 1227 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1228 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1229 ctrl->rrc(0, BNO055P0_LIA_DATA_Z_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1230
Yajirushi 0:3807ce385b2a 1231 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1232 }
Yajirushi 0:3807ce385b2a 1233
Yajirushi 0:3807ce385b2a 1234 /* ==================================================================
Yajirushi 0:3807ce385b2a 1235 * 重力ベクトル情報を取得する
Yajirushi 0:3807ce385b2a 1236 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1237 * &gvX: アドレス参照引数:関数実行後、この変数にX軸の値が格納される
Yajirushi 0:3807ce385b2a 1238 * &gvY: アドレス参照引数:関数実行後、この変数にY軸の値が格納される
Yajirushi 0:3807ce385b2a 1239 * &gvZ: アドレス参照引数:関数実行後、この変数にZ軸の値が格納される
Yajirushi 0:3807ce385b2a 1240 */
Yajirushi 0:3807ce385b2a 1241 void BOARDC_BNO055::getGVectorDataAll(short &gvX, short &gvY, short &gvZ){
Yajirushi 0:3807ce385b2a 1242 //連続6byte読み取り
Yajirushi 3:363ec3772dce 1243 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 1244 ctrl->rrc(0, BNO055P0_GRV_DATA_X_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 1245
Yajirushi 0:3807ce385b2a 1246 gvX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1247 gvY = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 1248 gvZ = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 1249 }
Yajirushi 0:3807ce385b2a 1250
Yajirushi 0:3807ce385b2a 1251 /* ==================================================================
Yajirushi 0:3807ce385b2a 1252 * 重力ベクトル情報(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1253 */
Yajirushi 0:3807ce385b2a 1254 short BOARDC_BNO055::getGVectorDataX(){
Yajirushi 0:3807ce385b2a 1255 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1256 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1257 ctrl->rrc(0, BNO055P0_GRV_DATA_X_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1258
Yajirushi 0:3807ce385b2a 1259 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1260 }
Yajirushi 0:3807ce385b2a 1261
Yajirushi 0:3807ce385b2a 1262 /* ==================================================================
Yajirushi 0:3807ce385b2a 1263 * 重力ベクトル情報(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1264 */
Yajirushi 0:3807ce385b2a 1265 short BOARDC_BNO055::getGVectorDataY(){
Yajirushi 0:3807ce385b2a 1266 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1267 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1268 ctrl->rrc(0, BNO055P0_GRV_DATA_Y_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1269
Yajirushi 0:3807ce385b2a 1270 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1271 }
Yajirushi 0:3807ce385b2a 1272
Yajirushi 0:3807ce385b2a 1273 /* ==================================================================
Yajirushi 0:3807ce385b2a 1274 * 重力ベクトル情報(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 1275 */
Yajirushi 0:3807ce385b2a 1276 short BOARDC_BNO055::getGVectorDataZ(){
Yajirushi 0:3807ce385b2a 1277 //連続2byte読み取り
Yajirushi 3:363ec3772dce 1278 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 1279 ctrl->rrc(0, BNO055P0_GRV_DATA_Z_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 1280
Yajirushi 0:3807ce385b2a 1281 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 1282 }
Yajirushi 0:3807ce385b2a 1283
Yajirushi 0:3807ce385b2a 1284 /* ==================================================================
Yajirushi 0:3807ce385b2a 1285 * センサー内部温度情報を取得する
Yajirushi 0:3807ce385b2a 1286 * 内部温度のセンサーは2つあり、どちらか一方のみの温度を返す
Yajirushi 0:3807ce385b2a 1287 * (設定レジスタTEMP_SOURCEにて選択可)
Yajirushi 0:3807ce385b2a 1288 * (setTempSource(bool)にて選択可)
Yajirushi 0:3807ce385b2a 1289 */
Yajirushi 0:3807ce385b2a 1290 char BOARDC_BNO055::getTemperature(){
Yajirushi 0:3807ce385b2a 1291 return ctrl->rr(0, BNO055P0_TEMP);
Yajirushi 0:3807ce385b2a 1292 }
Yajirushi 0:3807ce385b2a 1293
Yajirushi 0:3807ce385b2a 1294 /* ==================================================================
Yajirushi 0:3807ce385b2a 1295 * キャリブレーション(補正)の状態を取得する
Yajirushi 0:3807ce385b2a 1296 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1297 * &sys: アドレス参照引数:関数実行後、この変数にsystem補正の状態が格納される
Yajirushi 0:3807ce385b2a 1298 * &acc: アドレス参照引数:関数実行後、この変数に加速度センサー補正の状態が格納される
Yajirushi 0:3807ce385b2a 1299 * &mag: アドレス参照引数:関数実行後、この変数に地磁気センサー補正の状態が格納される
Yajirushi 0:3807ce385b2a 1300 * &gyro: アドレス参照引数:関数実行後、この変数に角速度センサー補正の状態が格納される
Yajirushi 0:3807ce385b2a 1301 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1302 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
Yajirushi 0:3807ce385b2a 1303 * 値は0[%],32[%],66[%],100[%]のいずれか
Yajirushi 0:3807ce385b2a 1304 */
Yajirushi 0:3807ce385b2a 1305 void BOARDC_BNO055::getCalibStatusAll(char &sys, char &acc, char &mag, char &gyro){
Yajirushi 0:3807ce385b2a 1306 char rv = ctrl->rr(0, BNO055P0_CALIB_STAT);
Yajirushi 0:3807ce385b2a 1307 sys = (((rv & 0xC0) >> 6) * 34);
Yajirushi 0:3807ce385b2a 1308 gyro = (((rv & 0x30) >> 4) * 34);
Yajirushi 0:3807ce385b2a 1309 acc = (((rv & 0x0C) >> 2) * 34);
Yajirushi 0:3807ce385b2a 1310 mag = ((rv & 0x03) * 34);
Yajirushi 0:3807ce385b2a 1311 sys -= (sys == 0) ? 0 : 2;
Yajirushi 0:3807ce385b2a 1312 gyro -= (gyro == 0) ? 0 : 2;
Yajirushi 0:3807ce385b2a 1313 acc -= (acc == 0) ? 0 : 2;
Yajirushi 0:3807ce385b2a 1314 mag -= (mag == 0) ? 0 : 2;
Yajirushi 0:3807ce385b2a 1315 }
Yajirushi 0:3807ce385b2a 1316
Yajirushi 0:3807ce385b2a 1317 /* ==================================================================
Yajirushi 0:3807ce385b2a 1318 * キャリブレーション(補正)の状態(systemのみ)を取得する
Yajirushi 0:3807ce385b2a 1319 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1320 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
Yajirushi 0:3807ce385b2a 1321 * 値は0[%],32[%],66[%],100[%]のいずれか
Yajirushi 0:3807ce385b2a 1322 */
Yajirushi 0:3807ce385b2a 1323 char BOARDC_BNO055::getCalibStatusSys(){
Yajirushi 0:3807ce385b2a 1324 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0xC0) >> 6) * 34) - 2;
Yajirushi 0:3807ce385b2a 1325 return (ret < 0) ? 0 : ret;
Yajirushi 0:3807ce385b2a 1326 }
Yajirushi 0:3807ce385b2a 1327
Yajirushi 0:3807ce385b2a 1328 /* ==================================================================
Yajirushi 0:3807ce385b2a 1329 * キャリブレーション(補正)の状態(加速度センサーのみ)を取得する
Yajirushi 0:3807ce385b2a 1330 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1331 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
Yajirushi 0:3807ce385b2a 1332 * 値は0[%],32[%],66[%],100[%]のいずれか
Yajirushi 0:3807ce385b2a 1333 */
Yajirushi 0:3807ce385b2a 1334 char BOARDC_BNO055::getCalibStatusAcc(){
Yajirushi 0:3807ce385b2a 1335 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x0C) >> 2) * 34) - 2;
Yajirushi 0:3807ce385b2a 1336 return (ret < 0) ? 0 : ret;
Yajirushi 0:3807ce385b2a 1337 }
Yajirushi 0:3807ce385b2a 1338
Yajirushi 0:3807ce385b2a 1339 /* ==================================================================
Yajirushi 0:3807ce385b2a 1340 * キャリブレーション(補正)の状態(地磁気センサーのみ)を取得する
Yajirushi 0:3807ce385b2a 1341 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1342 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
Yajirushi 0:3807ce385b2a 1343 * 値は0[%],32[%],66[%],100[%]のいずれか
Yajirushi 0:3807ce385b2a 1344 */
Yajirushi 0:3807ce385b2a 1345 char BOARDC_BNO055::getCalibStatusMag(){
Yajirushi 0:3807ce385b2a 1346 char ret = ((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x03) * 34) - 2;
Yajirushi 0:3807ce385b2a 1347 return (ret < 0) ? 0 : ret;
Yajirushi 0:3807ce385b2a 1348 }
Yajirushi 0:3807ce385b2a 1349
Yajirushi 0:3807ce385b2a 1350 /* ==================================================================
Yajirushi 0:3807ce385b2a 1351 * キャリブレーション(補正)の状態(角速度センサーのみ)を取得する
Yajirushi 0:3807ce385b2a 1352 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1353 * 各補正情報は0 - 100[%]の百分率で返答される。それぞれ2bitであるため
Yajirushi 0:3807ce385b2a 1354 * 値は0[%],32[%],66[%],100[%]のいずれか
Yajirushi 0:3807ce385b2a 1355 */
Yajirushi 0:3807ce385b2a 1356 char BOARDC_BNO055::getCalibStatusGyro(){
Yajirushi 0:3807ce385b2a 1357 char ret = (((ctrl->rr(0, BNO055P0_CALIB_STAT) & 0x30) >> 4) * 34) - 2;
Yajirushi 0:3807ce385b2a 1358 return (ret < 0) ? 0 : ret;
Yajirushi 0:3807ce385b2a 1359 }
Yajirushi 0:3807ce385b2a 1360
Yajirushi 0:3807ce385b2a 1361 /* ==================================================================
Yajirushi 0:3807ce385b2a 1362 * システムおよびセンサーのセルフテストの実行結果を取得する
Yajirushi 0:3807ce385b2a 1363 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1364 * returns:
Yajirushi 0:3807ce385b2a 1365 * 1bit目:加速度センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
Yajirushi 0:3807ce385b2a 1366 * 2bit目:地磁気センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
Yajirushi 0:3807ce385b2a 1367 * 3bit目:角速度センサーのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
Yajirushi 0:3807ce385b2a 1368 * 4bit目:内部マイコンのセルフテストの実行結果(0:failed(異常), 1:passed(正常))
Yajirushi 0:3807ce385b2a 1369 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1370 * 例:戻り値 0x0D (0b00001101)
Yajirushi 0:3807ce385b2a 1371 * >>加速度センサー:正常(1)
Yajirushi 0:3807ce385b2a 1372 * >>地磁気センサー:異常(0)
Yajirushi 0:3807ce385b2a 1373 * >>角速度センサー:正常(1)
Yajirushi 0:3807ce385b2a 1374 * >>内部マイコン:正常(1)
Yajirushi 0:3807ce385b2a 1375 */
Yajirushi 0:3807ce385b2a 1376 char BOARDC_BNO055::getSelfTestResultAll(){
Yajirushi 0:3807ce385b2a 1377 return ctrl->rr(0, BNO055P0_ST_RESULT);
Yajirushi 0:3807ce385b2a 1378 }
Yajirushi 0:3807ce385b2a 1379
Yajirushi 0:3807ce385b2a 1380 /* ==================================================================
Yajirushi 0:3807ce385b2a 1381 * 内部マイコン(BNO055のMCU)のセルフテストの実行結果を取得する
Yajirushi 0:3807ce385b2a 1382 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1383 * returns:
Yajirushi 0:3807ce385b2a 1384 * false:failed(異常)
Yajirushi 0:3807ce385b2a 1385 * true:passed(正常)
Yajirushi 0:3807ce385b2a 1386 */
Yajirushi 0:3807ce385b2a 1387 bool BOARDC_BNO055::getSelfTestResultMCU(){
Yajirushi 0:3807ce385b2a 1388 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x08) >> 3) == 1);
Yajirushi 0:3807ce385b2a 1389 }
Yajirushi 0:3807ce385b2a 1390
Yajirushi 0:3807ce385b2a 1391 /* ==================================================================
Yajirushi 0:3807ce385b2a 1392 * 加速度センサーのセルフテストの実行結果を取得する
Yajirushi 0:3807ce385b2a 1393 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1394 * returns:
Yajirushi 0:3807ce385b2a 1395 * false:failed(異常)
Yajirushi 0:3807ce385b2a 1396 * true:passed(正常)
Yajirushi 0:3807ce385b2a 1397 */
Yajirushi 0:3807ce385b2a 1398 bool BOARDC_BNO055::getSelfTestResultAcc(){
Yajirushi 0:3807ce385b2a 1399 return ((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x01) == 1);
Yajirushi 0:3807ce385b2a 1400 }
Yajirushi 0:3807ce385b2a 1401
Yajirushi 0:3807ce385b2a 1402 /* ==================================================================
Yajirushi 0:3807ce385b2a 1403 * 地磁気センサーのセルフテストの実行結果を取得する
Yajirushi 0:3807ce385b2a 1404 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1405 * returns:
Yajirushi 0:3807ce385b2a 1406 * false:failed(異常)
Yajirushi 0:3807ce385b2a 1407 * true:passed(正常)
Yajirushi 0:3807ce385b2a 1408 */
Yajirushi 0:3807ce385b2a 1409 bool BOARDC_BNO055::getSelfTestResultMag(){
Yajirushi 0:3807ce385b2a 1410 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x02) >> 1) == 1);
Yajirushi 0:3807ce385b2a 1411 }
Yajirushi 0:3807ce385b2a 1412
Yajirushi 0:3807ce385b2a 1413 /* ==================================================================
Yajirushi 0:3807ce385b2a 1414 * 地磁気センサーのセルフテストの実行結果を取得する
Yajirushi 0:3807ce385b2a 1415 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1416 * returns:
Yajirushi 0:3807ce385b2a 1417 * false:failed(異常)
Yajirushi 0:3807ce385b2a 1418 * true:passed(正常)
Yajirushi 0:3807ce385b2a 1419 */
Yajirushi 0:3807ce385b2a 1420 bool BOARDC_BNO055::getSelfTestResultGyro(){
Yajirushi 0:3807ce385b2a 1421 return (((ctrl->rr(0, BNO055P0_ST_RESULT) & 0x04) >> 2) == 1);
Yajirushi 0:3807ce385b2a 1422 }
Yajirushi 0:3807ce385b2a 1423
Yajirushi 0:3807ce385b2a 1424 /* ==================================================================
Yajirushi 0:3807ce385b2a 1425 * 発生している割り込みステータス情報を取得する
Yajirushi 0:3807ce385b2a 1426 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1427 * returns:
Yajirushi 0:3807ce385b2a 1428 * 3bit目:GYRO_AM(角速度AnyMotion発生)(1:発生中, 0:なし)
Yajirushi 0:3807ce385b2a 1429 * 4bit目:GYR_HIGH_RATE(角速度ハイレート発生)(1:発生中, 0:なし)
Yajirushi 0:3807ce385b2a 1430 * 6bit目:ACC_HIGH_G(加速度急加速発生)(1:発生中, 0:なし)
Yajirushi 0:3807ce385b2a 1431 * 7bit目:ACC_AM(角速度AnyMotion発生)(1:発生中, 0:なし)
Yajirushi 0:3807ce385b2a 1432 * 8bit目:ACC_NM(角速度NoMotion発生)(1:発生中, 0:なし)
Yajirushi 0:3807ce385b2a 1433 */
Yajirushi 0:3807ce385b2a 1434 char BOARDC_BNO055::triggeredIntALL(){
Yajirushi 0:3807ce385b2a 1435 return ctrl->rr(0, BNO055P0_INT_STA);
Yajirushi 0:3807ce385b2a 1436 }
Yajirushi 0:3807ce385b2a 1437
Yajirushi 0:3807ce385b2a 1438 /* ==================================================================
Yajirushi 0:3807ce385b2a 1439 * 発生している割り込みステータス情報(ACC_NM)を取得する
Yajirushi 0:3807ce385b2a 1440 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1441 * returns:
Yajirushi 0:3807ce385b2a 1442 * true:ACC_NMトリガー発生中
Yajirushi 0:3807ce385b2a 1443 * false:ACC_NMトリガーなし
Yajirushi 0:3807ce385b2a 1444 */
Yajirushi 0:3807ce385b2a 1445 bool BOARDC_BNO055::triggeredACC_NM(){
Yajirushi 0:3807ce385b2a 1446 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x80) >> 7) == 1);
Yajirushi 0:3807ce385b2a 1447 }
Yajirushi 0:3807ce385b2a 1448
Yajirushi 0:3807ce385b2a 1449 /* ==================================================================
Yajirushi 0:3807ce385b2a 1450 * 発生している割り込みステータス情報(ACC_AM)を取得する
Yajirushi 0:3807ce385b2a 1451 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1452 * returns:
Yajirushi 0:3807ce385b2a 1453 * true:ACC_AMトリガー発生中
Yajirushi 0:3807ce385b2a 1454 * false:ACC_AMトリガーなし
Yajirushi 0:3807ce385b2a 1455 */
Yajirushi 0:3807ce385b2a 1456 bool BOARDC_BNO055::triggeredACC_AM(){
Yajirushi 0:3807ce385b2a 1457 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x40) >> 6) == 1);
Yajirushi 0:3807ce385b2a 1458 }
Yajirushi 0:3807ce385b2a 1459
Yajirushi 0:3807ce385b2a 1460 /* ==================================================================
Yajirushi 0:3807ce385b2a 1461 * 発生している割り込みステータス情報(ACC_HIGH_G)を取得する
Yajirushi 0:3807ce385b2a 1462 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1463 * returns:
Yajirushi 0:3807ce385b2a 1464 * true:ACC_HIGH_Gトリガー発生中
Yajirushi 0:3807ce385b2a 1465 * false:ACC_HIGH_Gトリガーなし
Yajirushi 0:3807ce385b2a 1466 */
Yajirushi 0:3807ce385b2a 1467 bool BOARDC_BNO055::triggeredACC_HIGH_G(){
Yajirushi 0:3807ce385b2a 1468 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x20) >> 5) == 1);
Yajirushi 0:3807ce385b2a 1469 }
Yajirushi 0:3807ce385b2a 1470
Yajirushi 0:3807ce385b2a 1471 /* ==================================================================
Yajirushi 0:3807ce385b2a 1472 * 発生している割り込みステータス情報(GYR_HIGH_RATE)を取得する
Yajirushi 0:3807ce385b2a 1473 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1474 * returns:
Yajirushi 0:3807ce385b2a 1475 * true:GYR_HIGH_RATEトリガー発生中
Yajirushi 0:3807ce385b2a 1476 * false:GYR_HIGH_RATEトリガーなし
Yajirushi 0:3807ce385b2a 1477 */
Yajirushi 0:3807ce385b2a 1478 bool BOARDC_BNO055::triggeredGYR_HIGH_RATE(){
Yajirushi 0:3807ce385b2a 1479 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x08) >> 3) == 1);
Yajirushi 0:3807ce385b2a 1480 }
Yajirushi 0:3807ce385b2a 1481
Yajirushi 0:3807ce385b2a 1482 /* ==================================================================
Yajirushi 0:3807ce385b2a 1483 * 発生している割り込みステータス情報(GYRO_AM)を取得する
Yajirushi 0:3807ce385b2a 1484 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1485 * returns:
Yajirushi 0:3807ce385b2a 1486 * true:GYRO_AMトリガー発生中
Yajirushi 0:3807ce385b2a 1487 * false:GYRO_AMトリガーなし
Yajirushi 0:3807ce385b2a 1488 */
Yajirushi 0:3807ce385b2a 1489 bool BOARDC_BNO055::triggeredGYRO_AM(){
Yajirushi 0:3807ce385b2a 1490 return (((ctrl->rr(0, BNO055P0_INT_STA) & 0x04) >> 2) == 1);
Yajirushi 0:3807ce385b2a 1491 }
Yajirushi 0:3807ce385b2a 1492
Yajirushi 0:3807ce385b2a 1493 /* ==================================================================
Yajirushi 0:3807ce385b2a 1494 * BNO055のシステムクロック固定情報を取得する
Yajirushi 0:3807ce385b2a 1495 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1496 * returns:
Yajirushi 0:3807ce385b2a 1497 * true:設定によって固定されている(SYS_TRIGGEレジスタのCLK_SEL)
Yajirushi 0:3807ce385b2a 1498 * false:設定されていない(内部か外部選択可)
Yajirushi 0:3807ce385b2a 1499 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1500 * setSys_ExternalCrystal(bool)で設定可
Yajirushi 0:3807ce385b2a 1501 */
Yajirushi 0:3807ce385b2a 1502 bool BOARDC_BNO055::isSystemClockFixed(){
Yajirushi 0:3807ce385b2a 1503 return (ctrl->rr(0, BNO055P0_SYS_CLK_STATUS) == 1);
Yajirushi 0:3807ce385b2a 1504 }
Yajirushi 0:3807ce385b2a 1505
Yajirushi 0:3807ce385b2a 1506 /* ==================================================================
Yajirushi 0:3807ce385b2a 1507 * BNO055のシステムステータスを取得する
Yajirushi 0:3807ce385b2a 1508 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1509 * returns:
Yajirushi 0:3807ce385b2a 1510 * 0: システム待機状態
Yajirushi 0:3807ce385b2a 1511 * 1: システムエラー
Yajirushi 0:3807ce385b2a 1512 * 2: ペリフェラル初期化中
Yajirushi 0:3807ce385b2a 1513 * 3: システム初期化中
Yajirushi 0:3807ce385b2a 1514 * 4: セルフテスト実行中
Yajirushi 0:3807ce385b2a 1515 * 5: 起動中(Fusionアルゴリズム起動中)
Yajirushi 0:3807ce385b2a 1516 * 6: 起動中(Fusionアルゴリズムなし)
Yajirushi 0:3807ce385b2a 1517 */
Yajirushi 0:3807ce385b2a 1518 char BOARDC_BNO055::getSystemStatus(){
Yajirushi 0:3807ce385b2a 1519 return ctrl->rr(0, BNO055P0_SYS_STATUS);
Yajirushi 0:3807ce385b2a 1520 }
Yajirushi 0:3807ce385b2a 1521
Yajirushi 0:3807ce385b2a 1522 /* ==================================================================
Yajirushi 0:3807ce385b2a 1523 * BNO055のシステムエラー情報を取得する
Yajirushi 0:3807ce385b2a 1524 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1525 * returns:
Yajirushi 0:3807ce385b2a 1526 * 0: エラーなし
Yajirushi 0:3807ce385b2a 1527 * 1: ペリフェラル初期化エラー
Yajirushi 0:3807ce385b2a 1528 * 2: システム初期化エラー
Yajirushi 0:3807ce385b2a 1529 * 3: セルフテスト結果不調
Yajirushi 0:3807ce385b2a 1530 * 4: レジスタマップエラー(値の範囲外)
Yajirushi 0:3807ce385b2a 1531 * 5: レジスタマップエラー(アドレスの範囲外)
Yajirushi 0:3807ce385b2a 1532 * 6: レジスタマップエラー(書き込み不能)
Yajirushi 0:3807ce385b2a 1533 * 7: BNO005LowPowerモードにつき指定モード実行不可
Yajirushi 0:3807ce385b2a 1534 * 8: 加速度センサーPowerMode実行不可
Yajirushi 0:3807ce385b2a 1535 * 9: Fusionアルゴリズム設定エラー
Yajirushi 0:3807ce385b2a 1536 * 10: 各センサー設定エラー
Yajirushi 0:3807ce385b2a 1537 */
Yajirushi 0:3807ce385b2a 1538 char BOARDC_BNO055::getSystemError(){
Yajirushi 0:3807ce385b2a 1539 return ctrl->rr(0, BNO055P0_SYS_ERR);
Yajirushi 0:3807ce385b2a 1540 }
Yajirushi 0:3807ce385b2a 1541
Yajirushi 0:3807ce385b2a 1542 /* ==================================================================
Yajirushi 0:3807ce385b2a 1543 * システムの設定単位系を取得する
Yajirushi 0:3807ce385b2a 1544 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1545 * returns:
Yajirushi 0:3807ce385b2a 1546 * 1bit目: 加速度センサー単位系(0:m/s^2, 1:mg)
Yajirushi 0:3807ce385b2a 1547 * 2bit目: 角速度センサー単位系(0:deg/s, 1:rad/s)
Yajirushi 0:3807ce385b2a 1548 * 3bit目: オイラー角単位系(0:deg, 1:rad)
Yajirushi 0:3807ce385b2a 1549 * 5bit目: 温度単位系(0:摂氏, 1:華氏)
Yajirushi 0:3807ce385b2a 1550 * 7bit目: 出力設定(0:Windows, 1:Android)
Yajirushi 0:3807ce385b2a 1551 */
Yajirushi 0:3807ce385b2a 1552 char BOARDC_BNO055::getUNIT_SEL(){
Yajirushi 0:3807ce385b2a 1553 return ctrl->rr(0, BNO055P0_UNIT_SEL);
Yajirushi 0:3807ce385b2a 1554 }
Yajirushi 0:3807ce385b2a 1555
Yajirushi 0:3807ce385b2a 1556 /* ==================================================================
Yajirushi 0:3807ce385b2a 1557 * システムの設定単位系を設定する
Yajirushi 0:3807ce385b2a 1558 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1559 * 引数selectValue:
Yajirushi 0:3807ce385b2a 1560 * 1bit目: 加速度センサー単位系(0:m/s^2, 1:mg)
Yajirushi 0:3807ce385b2a 1561 * 2bit目: 角速度センサー単位系(0:deg/s, 1:rad/s)
Yajirushi 0:3807ce385b2a 1562 * 3bit目: オイラー角単位系(0:deg, 1:rad)
Yajirushi 0:3807ce385b2a 1563 * 5bit目: 温度単位系(0:摂氏, 1:華氏)
Yajirushi 0:3807ce385b2a 1564 * 7bit目: 出力設定(0:Windows, 1:Android)
Yajirushi 0:3807ce385b2a 1565 * returns:
Yajirushi 0:3807ce385b2a 1566 * -1 失敗
Yajirushi 0:3807ce385b2a 1567 * 1 成功
Yajirushi 0:3807ce385b2a 1568 */
Yajirushi 0:3807ce385b2a 1569 char BOARDC_BNO055::setUNIT_SEL(char selectValue){
Yajirushi 0:3807ce385b2a 1570 if(ctrl->wr(0, BNO055P0_UNIT_SEL, selectValue) == -1) return -1;
Yajirushi 0:3807ce385b2a 1571
Yajirushi 0:3807ce385b2a 1572 scaleACC = ((selectValue & 0x01) == 0) ? 0.01f : 1.0f;
Yajirushi 0:3807ce385b2a 1573 scaleGYRO = ((selectValue & 0x02) == 0) ? 0.0625f : 0.001111111111f;
Yajirushi 0:3807ce385b2a 1574 scaleEuler = ((selectValue & 0x04) == 0) ? 0.0625f : 0.001111111111f;
Yajirushi 0:3807ce385b2a 1575 scaleTEMP = ((selectValue & 0x10) == 0) ? 1.0f : 2.0f;
Yajirushi 0:3807ce385b2a 1576 scaleLIA = scaleACC;
Yajirushi 0:3807ce385b2a 1577 scaleGV = scaleACC;
Yajirushi 0:3807ce385b2a 1578
Yajirushi 0:3807ce385b2a 1579 return 1;
Yajirushi 0:3807ce385b2a 1580 }
Yajirushi 0:3807ce385b2a 1581
Yajirushi 0:3807ce385b2a 1582 /* ==================================================================
Yajirushi 0:3807ce385b2a 1583 * システムの設定単位系(加速度センサー)を設定する
Yajirushi 0:3807ce385b2a 1584 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1585 * 引数isMeterPerSec2:
Yajirushi 0:3807ce385b2a 1586 * true: m/s^2
Yajirushi 0:3807ce385b2a 1587 * false: mg
Yajirushi 0:3807ce385b2a 1588 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1589 * returns:
Yajirushi 0:3807ce385b2a 1590 * -1 失敗
Yajirushi 0:3807ce385b2a 1591 * 1 成功
Yajirushi 0:3807ce385b2a 1592 */
Yajirushi 0:3807ce385b2a 1593 char BOARDC_BNO055::setUNIT_AccUnit(bool isMeterPerSec2){
Yajirushi 0:3807ce385b2a 1594 char val = getUNIT_SEL() & 0xFE;
Yajirushi 0:3807ce385b2a 1595 if(!isMeterPerSec2) val += 1;
Yajirushi 0:3807ce385b2a 1596 return setUNIT_SEL(val);
Yajirushi 0:3807ce385b2a 1597 }
Yajirushi 0:3807ce385b2a 1598
Yajirushi 0:3807ce385b2a 1599 /* ==================================================================
Yajirushi 0:3807ce385b2a 1600 * システムの設定単位系(角速度センサー)を設定する
Yajirushi 0:3807ce385b2a 1601 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1602 * 引数isDps:
Yajirushi 0:3807ce385b2a 1603 * true: dps(Degrees/s)
Yajirushi 0:3807ce385b2a 1604 * false: rps(Radians/s)
Yajirushi 0:3807ce385b2a 1605 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1606 * returns:
Yajirushi 0:3807ce385b2a 1607 * -1 失敗
Yajirushi 0:3807ce385b2a 1608 * 1 成功
Yajirushi 0:3807ce385b2a 1609 */
Yajirushi 0:3807ce385b2a 1610 char BOARDC_BNO055::setUNIT_GyroUnit(bool isDps){
Yajirushi 0:3807ce385b2a 1611 char val = getUNIT_SEL() & 0xFD;
Yajirushi 0:3807ce385b2a 1612 if(!isDps) val += 2;
Yajirushi 0:3807ce385b2a 1613 return setUNIT_SEL(val);
Yajirushi 0:3807ce385b2a 1614 }
Yajirushi 0:3807ce385b2a 1615
Yajirushi 0:3807ce385b2a 1616 /* ==================================================================
Yajirushi 0:3807ce385b2a 1617 * システムの設定単位系(オイラー角)を設定する
Yajirushi 0:3807ce385b2a 1618 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1619 * 引数isDegrees:
Yajirushi 0:3807ce385b2a 1620 * true: Degrees
Yajirushi 0:3807ce385b2a 1621 * false: Radians
Yajirushi 0:3807ce385b2a 1622 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1623 * returns:
Yajirushi 0:3807ce385b2a 1624 * -1 失敗
Yajirushi 0:3807ce385b2a 1625 * 1 成功
Yajirushi 0:3807ce385b2a 1626 */
Yajirushi 0:3807ce385b2a 1627 char BOARDC_BNO055::setUNIT_EulerUnit(bool isDegrees){
Yajirushi 0:3807ce385b2a 1628 char val = getUNIT_SEL() & 0xFB;
Yajirushi 0:3807ce385b2a 1629 if(!isDegrees) val += 4;
Yajirushi 0:3807ce385b2a 1630 return setUNIT_SEL(val);
Yajirushi 0:3807ce385b2a 1631 }
Yajirushi 0:3807ce385b2a 1632
Yajirushi 0:3807ce385b2a 1633 /* ==================================================================
Yajirushi 0:3807ce385b2a 1634 * システムの設定単位系(温度)を設定する
Yajirushi 0:3807ce385b2a 1635 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1636 * 引数isCelsius:
Yajirushi 0:3807ce385b2a 1637 * true: 摂氏(Celsius)
Yajirushi 0:3807ce385b2a 1638 * false: 華氏(Fahrenheit)
Yajirushi 0:3807ce385b2a 1639 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1640 * returns:
Yajirushi 0:3807ce385b2a 1641 * -1 失敗
Yajirushi 0:3807ce385b2a 1642 * 1 成功
Yajirushi 0:3807ce385b2a 1643 */
Yajirushi 0:3807ce385b2a 1644 char BOARDC_BNO055::setUNIT_Temperature(bool isCelsius){
Yajirushi 0:3807ce385b2a 1645 char val = getUNIT_SEL() & 0xEF;
Yajirushi 0:3807ce385b2a 1646 if(!isCelsius) val += 16;
Yajirushi 0:3807ce385b2a 1647 return setUNIT_SEL(val);
Yajirushi 0:3807ce385b2a 1648 }
Yajirushi 0:3807ce385b2a 1649
Yajirushi 0:3807ce385b2a 1650 /* ==================================================================
Yajirushi 0:3807ce385b2a 1651 * システムの設定単位系(出力設定)を設定する
Yajirushi 0:3807ce385b2a 1652 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1653 * 引数ori_Android:
Yajirushi 0:3807ce385b2a 1654 * true: Android用(Pitch角:+180 to -180 反時計回り+)
Yajirushi 0:3807ce385b2a 1655 * false: Windows用(Pitch角:-180 to +180 時計回り+)
Yajirushi 0:3807ce385b2a 1656 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1657 * returns:
Yajirushi 0:3807ce385b2a 1658 * -1 失敗
Yajirushi 0:3807ce385b2a 1659 * 1 成功
Yajirushi 0:3807ce385b2a 1660 */
Yajirushi 0:3807ce385b2a 1661 char BOARDC_BNO055::setUNIT_OrientationMode(bool ori_Android){
Yajirushi 0:3807ce385b2a 1662 char val = getUNIT_SEL() & 0xBF;
Yajirushi 0:3807ce385b2a 1663 if(!ori_Android) val += 64;
Yajirushi 0:3807ce385b2a 1664 return setUNIT_SEL(val);
Yajirushi 0:3807ce385b2a 1665 }
Yajirushi 0:3807ce385b2a 1666
Yajirushi 0:3807ce385b2a 1667 /* ==================================================================
Yajirushi 0:3807ce385b2a 1668 * システムの動作モードを取得する
Yajirushi 0:3807ce385b2a 1669 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1670 * returns:
Yajirushi 0:3807ce385b2a 1671 * 1 ACCONLY(NO FUSION)加速度のみ
Yajirushi 0:3807ce385b2a 1672 * 2 MAGONLY(NO FUSION)地磁気のみ
Yajirushi 0:3807ce385b2a 1673 * 3 GYROONLY(NO FUSION)角速度のみ
Yajirushi 0:3807ce385b2a 1674 * 4 ACCMAG(NO FUSION)加速度と地磁気
Yajirushi 0:3807ce385b2a 1675 * 5 ACCGYRO(NO FUSION)加速度と角速度
Yajirushi 0:3807ce385b2a 1676 * 6 MAGGYRO(NO FUSION)地磁気と角速度
Yajirushi 0:3807ce385b2a 1677 * 7 AMG(NO FUSION)加速度、地磁気、角速度
Yajirushi 0:3807ce385b2a 1678 * 8 IMU
Yajirushi 0:3807ce385b2a 1679 * 9 COMPASS
Yajirushi 0:3807ce385b2a 1680 * 10 M4G
Yajirushi 0:3807ce385b2a 1681 * 11 NDOF_FMC_OFF
Yajirushi 0:3807ce385b2a 1682 * 12 NDOF
Yajirushi 0:3807ce385b2a 1683 */
Yajirushi 0:3807ce385b2a 1684 char BOARDC_BNO055::getOperationMode(){
Yajirushi 0:3807ce385b2a 1685 return ctrl->rr(0, BNO055P0_OPR_MODE);
Yajirushi 0:3807ce385b2a 1686 }
Yajirushi 0:3807ce385b2a 1687
Yajirushi 0:3807ce385b2a 1688 /* ==================================================================
Yajirushi 0:3807ce385b2a 1689 * システムの動作モードを設定する
Yajirushi 0:3807ce385b2a 1690 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1691 * 引数modeValue:
Yajirushi 0:3807ce385b2a 1692 * 1 ACCONLY(NO FUSION)加速度のみ
Yajirushi 0:3807ce385b2a 1693 * 2 MAGONLY(NO FUSION)地磁気のみ
Yajirushi 0:3807ce385b2a 1694 * 3 GYROONLY(NO FUSION)角速度のみ
Yajirushi 0:3807ce385b2a 1695 * 4 ACCMAG(NO FUSION)加速度と地磁気
Yajirushi 0:3807ce385b2a 1696 * 5 ACCGYRO(NO FUSION)加速度と角速度
Yajirushi 0:3807ce385b2a 1697 * 6 MAGGYRO(NO FUSION)地磁気と角速度
Yajirushi 0:3807ce385b2a 1698 * 7 AMG(NO FUSION)加速度、地磁気、角速度
Yajirushi 0:3807ce385b2a 1699 * 8 IMU
Yajirushi 0:3807ce385b2a 1700 * 9 COMPASS
Yajirushi 0:3807ce385b2a 1701 * 10 M4G
Yajirushi 0:3807ce385b2a 1702 * 11 NDOF_FMC_OFF
Yajirushi 0:3807ce385b2a 1703 * 12 NDOF
Yajirushi 0:3807ce385b2a 1704 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1705 * returns:
Yajirushi 0:3807ce385b2a 1706 * -1 失敗
Yajirushi 0:3807ce385b2a 1707 * 1 成功
Yajirushi 0:3807ce385b2a 1708 */
Yajirushi 0:3807ce385b2a 1709 char BOARDC_BNO055::setOperationMode(char modeValue){
Yajirushi 0:3807ce385b2a 1710 if(modeValue < 0 || modeValue > 12) modeValue = 7;
Yajirushi 0:3807ce385b2a 1711 return ctrl->wr(0, BNO055P0_OPR_MODE, modeValue);
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_CONFIG(){
Yajirushi 0:3807ce385b2a 1722 return ctrl->wr(0, BNO055P0_OPR_MODE, 0);
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_ACCONRY(){
Yajirushi 0:3807ce385b2a 1733 return ctrl->wr(0, BNO055P0_OPR_MODE, 1);
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_MAGONRY(){
Yajirushi 0:3807ce385b2a 1744 return ctrl->wr(0, BNO055P0_OPR_MODE, 2);
Yajirushi 0:3807ce385b2a 1745 }
Yajirushi 0:3807ce385b2a 1746
Yajirushi 0:3807ce385b2a 1747 /* ==================================================================
Yajirushi 0:3807ce385b2a 1748 * システムの動作モードを角速度モードに設定する
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_GYROONRY(){
Yajirushi 0:3807ce385b2a 1755 return ctrl->wr(0, BNO055P0_OPR_MODE, 3);
Yajirushi 0:3807ce385b2a 1756 }
Yajirushi 0:3807ce385b2a 1757
Yajirushi 0:3807ce385b2a 1758 /* ==================================================================
Yajirushi 0:3807ce385b2a 1759 * システムの動作モードを加速度地磁気モードに設定する
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_ACCMAG(){
Yajirushi 0:3807ce385b2a 1766 return ctrl->wr(0, BNO055P0_OPR_MODE, 4);
Yajirushi 0:3807ce385b2a 1767 }
Yajirushi 0:3807ce385b2a 1768
Yajirushi 0:3807ce385b2a 1769 /* ==================================================================
Yajirushi 0:3807ce385b2a 1770 * システムの動作モードを加速度角速度モードに設定する
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_ACCGYRO(){
Yajirushi 0:3807ce385b2a 1777 return ctrl->wr(0, BNO055P0_OPR_MODE, 5);
Yajirushi 0:3807ce385b2a 1778 }
Yajirushi 0:3807ce385b2a 1779
Yajirushi 0:3807ce385b2a 1780 /* ==================================================================
Yajirushi 0:3807ce385b2a 1781 * システムの動作モードを地磁気角速度モードに設定する
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_MAGGYRO(){
Yajirushi 0:3807ce385b2a 1788 return ctrl->wr(0, BNO055P0_OPR_MODE, 6);
Yajirushi 0:3807ce385b2a 1789 }
Yajirushi 0:3807ce385b2a 1790
Yajirushi 0:3807ce385b2a 1791 /* ==================================================================
Yajirushi 0:3807ce385b2a 1792 * システムの動作モードをFusionなし9軸モードに設定する
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_AMG(){
Yajirushi 0:3807ce385b2a 1799 return ctrl->wr(0, BNO055P0_OPR_MODE, 7);
Yajirushi 0:3807ce385b2a 1800 }
Yajirushi 0:3807ce385b2a 1801
Yajirushi 0:3807ce385b2a 1802 /* ==================================================================
Yajirushi 0:3807ce385b2a 1803 * システムの動作モードを6軸(加速度、角速度)Fusionモードに設定する
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_IMU(){
Yajirushi 0:3807ce385b2a 1810 return ctrl->wr(0, BNO055P0_OPR_MODE, 8);
Yajirushi 0:3807ce385b2a 1811 }
Yajirushi 0:3807ce385b2a 1812
Yajirushi 0:3807ce385b2a 1813 /* ==================================================================
Yajirushi 0:3807ce385b2a 1814 * システムの動作モードを6軸(加速度、地磁気)Fusionモード(相対系)に設定する
Yajirushi 0:3807ce385b2a 1815 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1816 * returns:
Yajirushi 0:3807ce385b2a 1817 * -1 失敗
Yajirushi 0:3807ce385b2a 1818 * 1 成功
Yajirushi 0:3807ce385b2a 1819 */
Yajirushi 0:3807ce385b2a 1820 char BOARDC_BNO055::setOperation_Fusion_COMPASS(){
Yajirushi 0:3807ce385b2a 1821 return ctrl->wr(0, BNO055P0_OPR_MODE, 9);
Yajirushi 0:3807ce385b2a 1822 }
Yajirushi 0:3807ce385b2a 1823
Yajirushi 0:3807ce385b2a 1824 /* ==================================================================
Yajirushi 0:3807ce385b2a 1825 * システムの動作モードを6軸(加速度、地磁気)Fusionモード(絶対系)に設定する
Yajirushi 0:3807ce385b2a 1826 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1827 * returns:
Yajirushi 0:3807ce385b2a 1828 * -1 失敗
Yajirushi 0:3807ce385b2a 1829 * 1 成功
Yajirushi 0:3807ce385b2a 1830 */
Yajirushi 0:3807ce385b2a 1831 char BOARDC_BNO055::setOperation_Fusion_M4G(){
Yajirushi 0:3807ce385b2a 1832 return ctrl->wr(0, BNO055P0_OPR_MODE, 10);
Yajirushi 0:3807ce385b2a 1833 }
Yajirushi 0:3807ce385b2a 1834
Yajirushi 0:3807ce385b2a 1835 /* ==================================================================
Yajirushi 0:3807ce385b2a 1836 * システムの動作モードをNDOFモード(地磁気短時間補正OFF)に設定する
Yajirushi 0:3807ce385b2a 1837 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1838 * returns:
Yajirushi 0:3807ce385b2a 1839 * -1 失敗
Yajirushi 0:3807ce385b2a 1840 * 1 成功
Yajirushi 0:3807ce385b2a 1841 */
Yajirushi 0:3807ce385b2a 1842 char BOARDC_BNO055::setOperation_Fusion_NDOF_FMC_OFF(){
Yajirushi 0:3807ce385b2a 1843 return ctrl->wr(0, BNO055P0_OPR_MODE, 11);
Yajirushi 0:3807ce385b2a 1844 }
Yajirushi 0:3807ce385b2a 1845
Yajirushi 0:3807ce385b2a 1846 /* ==================================================================
Yajirushi 0:3807ce385b2a 1847 * システムの動作モードをNDOFモードに設定する
Yajirushi 0:3807ce385b2a 1848 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1849 * returns:
Yajirushi 0:3807ce385b2a 1850 * -1 失敗
Yajirushi 0:3807ce385b2a 1851 * 1 成功
Yajirushi 0:3807ce385b2a 1852 */
Yajirushi 0:3807ce385b2a 1853 char BOARDC_BNO055::setOperation_Fusion_NDOF(){
Yajirushi 0:3807ce385b2a 1854 return ctrl->wr(0, BNO055P0_OPR_MODE, 12);
Yajirushi 0:3807ce385b2a 1855 }
Yajirushi 0:3807ce385b2a 1856
Yajirushi 0:3807ce385b2a 1857 /* ==================================================================
Yajirushi 0:3807ce385b2a 1858 * システムの電源モードを取得する
Yajirushi 0:3807ce385b2a 1859 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1860 * returns:
Yajirushi 0:3807ce385b2a 1861 * 0: Normal
Yajirushi 0:3807ce385b2a 1862 * 1: LowPower
Yajirushi 0:3807ce385b2a 1863 * 2: Suspend
Yajirushi 0:3807ce385b2a 1864 */
Yajirushi 0:3807ce385b2a 1865 char BOARDC_BNO055::getPowerMode(){
Yajirushi 0:3807ce385b2a 1866 return ctrl->rr(0, BNO055P0_PWR_MODE);
Yajirushi 0:3807ce385b2a 1867 }
Yajirushi 0:3807ce385b2a 1868
Yajirushi 0:3807ce385b2a 1869 /* ==================================================================
Yajirushi 0:3807ce385b2a 1870 * システムの電源モードを設定する
Yajirushi 0:3807ce385b2a 1871 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1872 * modeValue:
Yajirushi 0:3807ce385b2a 1873 * 0: Normal
Yajirushi 0:3807ce385b2a 1874 * 1: LowPower
Yajirushi 0:3807ce385b2a 1875 * 2: Suspend
Yajirushi 0:3807ce385b2a 1876 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1877 * returns:
Yajirushi 0:3807ce385b2a 1878 * -1 失敗
Yajirushi 0:3807ce385b2a 1879 * 1 成功
Yajirushi 0:3807ce385b2a 1880 */
Yajirushi 0:3807ce385b2a 1881 char BOARDC_BNO055::setPowerMode(unsigned char modeValue){
Yajirushi 0:3807ce385b2a 1882 if(modeValue > 2) return -1;
Yajirushi 0:3807ce385b2a 1883 return ctrl->wr(0, BNO055P0_PWR_MODE, modeValue);
Yajirushi 0:3807ce385b2a 1884 }
Yajirushi 0:3807ce385b2a 1885
Yajirushi 0:3807ce385b2a 1886 /* ==================================================================
Yajirushi 0:3807ce385b2a 1887 * システムの電源モードを通常モードに設定する
Yajirushi 0:3807ce385b2a 1888 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1889 * returns:
Yajirushi 0:3807ce385b2a 1890 * -1 失敗
Yajirushi 0:3807ce385b2a 1891 * 1 成功
Yajirushi 0:3807ce385b2a 1892 */
Yajirushi 0:3807ce385b2a 1893 char BOARDC_BNO055::setPowerMode_Normal(){
Yajirushi 0:3807ce385b2a 1894 return ctrl->wr(0, BNO055P0_PWR_MODE, 0);
Yajirushi 0:3807ce385b2a 1895 }
Yajirushi 0:3807ce385b2a 1896
Yajirushi 0:3807ce385b2a 1897 /* ==================================================================
Yajirushi 0:3807ce385b2a 1898 * システムの電源モードを低消費電力モードに設定する
Yajirushi 0:3807ce385b2a 1899 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1900 * returns:
Yajirushi 0:3807ce385b2a 1901 * -1 失敗
Yajirushi 0:3807ce385b2a 1902 * 1 成功
Yajirushi 0:3807ce385b2a 1903 */
Yajirushi 0:3807ce385b2a 1904 char BOARDC_BNO055::setPowerMode_LowPower(){
Yajirushi 0:3807ce385b2a 1905 return ctrl->wr(0, BNO055P0_PWR_MODE, 1);
Yajirushi 0:3807ce385b2a 1906 }
Yajirushi 0:3807ce385b2a 1907
Yajirushi 0:3807ce385b2a 1908 /* ==================================================================
Yajirushi 0:3807ce385b2a 1909 * システムの電源モードをスリープモードに設定する
Yajirushi 0:3807ce385b2a 1910 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1911 * returns:
Yajirushi 0:3807ce385b2a 1912 * -1 失敗
Yajirushi 0:3807ce385b2a 1913 * 1 成功
Yajirushi 0:3807ce385b2a 1914 */
Yajirushi 0:3807ce385b2a 1915 char BOARDC_BNO055::setPowerMode_Suspend(){
Yajirushi 0:3807ce385b2a 1916 return ctrl->wr(0, BNO055P0_PWR_MODE, 2);
Yajirushi 0:3807ce385b2a 1917 }
Yajirushi 0:3807ce385b2a 1918
Yajirushi 0:3807ce385b2a 1919 /* ==================================================================
Yajirushi 0:3807ce385b2a 1920 * システムのトリガー設定を変更する
Yajirushi 0:3807ce385b2a 1921 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1922 * returns:
Yajirushi 0:3807ce385b2a 1923 * -1 失敗
Yajirushi 0:3807ce385b2a 1924 * 0 変更なし
Yajirushi 0:3807ce385b2a 1925 * 1 成功
Yajirushi 0:3807ce385b2a 1926 */
Yajirushi 0:3807ce385b2a 1927 char BOARDC_BNO055::setSysTrigger(char regVal){
Yajirushi 0:3807ce385b2a 1928 clkExt = regVal >> 7;
Yajirushi 0:3807ce385b2a 1929 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, regVal & 0xE1);
Yajirushi 0:3807ce385b2a 1930 }
Yajirushi 0:3807ce385b2a 1931
Yajirushi 0:3807ce385b2a 1932 /* ==================================================================
Yajirushi 0:3807ce385b2a 1933 * システムのクロック発振元を設定する
Yajirushi 0:3807ce385b2a 1934 * 外部を指定する場合は、設定前にXIN,XOUTが発振子に結線されている必要がある
Yajirushi 0:3807ce385b2a 1935 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1936 * returns:
Yajirushi 0:3807ce385b2a 1937 * -1 失敗
Yajirushi 0:3807ce385b2a 1938 * 0 変更なし
Yajirushi 0:3807ce385b2a 1939 * 1 成功
Yajirushi 0:3807ce385b2a 1940 */
Yajirushi 0:3807ce385b2a 1941 char BOARDC_BNO055::setSys_ExternalCrystal(bool isExternal){
Yajirushi 0:3807ce385b2a 1942 if(clkExt == isExternal) return 0;
Yajirushi 0:3807ce385b2a 1943
Yajirushi 0:3807ce385b2a 1944 clkExt = isExternal;
Yajirushi 0:3807ce385b2a 1945 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, (clkExt) ? 0x80 : 0x00);
Yajirushi 0:3807ce385b2a 1946 }
Yajirushi 0:3807ce385b2a 1947
Yajirushi 0:3807ce385b2a 1948 /* ==================================================================
Yajirushi 0:3807ce385b2a 1949 * システムの割り込み発生をすべてリセットする
Yajirushi 0:3807ce385b2a 1950 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1951 * returns:
Yajirushi 0:3807ce385b2a 1952 * -1 失敗
Yajirushi 0:3807ce385b2a 1953 * 1 成功
Yajirushi 0:3807ce385b2a 1954 */
Yajirushi 0:3807ce385b2a 1955 char BOARDC_BNO055::resetInterrupt(){
Yajirushi 0:3807ce385b2a 1956 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x40);
Yajirushi 0:3807ce385b2a 1957 }
Yajirushi 0:3807ce385b2a 1958
Yajirushi 0:3807ce385b2a 1959 /* ==================================================================
Yajirushi 0:3807ce385b2a 1960 * システムをリセットする
Yajirushi 0:3807ce385b2a 1961 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1962 * returns:
Yajirushi 0:3807ce385b2a 1963 * -1 失敗
Yajirushi 0:3807ce385b2a 1964 * 1 成功
Yajirushi 0:3807ce385b2a 1965 */
Yajirushi 0:3807ce385b2a 1966 char BOARDC_BNO055::soft_reset(){
Yajirushi 0:3807ce385b2a 1967 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x20);
Yajirushi 0:3807ce385b2a 1968 }
Yajirushi 0:3807ce385b2a 1969
Yajirushi 0:3807ce385b2a 1970 /* ==================================================================
Yajirushi 0:3807ce385b2a 1971 * セルフテストを実行する
Yajirushi 0:3807ce385b2a 1972 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1973 * returns:
Yajirushi 0:3807ce385b2a 1974 * -1 失敗
Yajirushi 0:3807ce385b2a 1975 * 1 成功
Yajirushi 0:3807ce385b2a 1976 */
Yajirushi 0:3807ce385b2a 1977 char BOARDC_BNO055::execSelfTest(){
Yajirushi 0:3807ce385b2a 1978 return ctrl->wr(0, BNO055P0_SYS_TRIGGER, ((clkExt) ? 0x80 : 0x00) | 0x01);
Yajirushi 0:3807ce385b2a 1979 }
Yajirushi 0:3807ce385b2a 1980
Yajirushi 0:3807ce385b2a 1981 /* ==================================================================
Yajirushi 0:3807ce385b2a 1982 * システムの温度計測に使用するセンサーを取得する
Yajirushi 0:3807ce385b2a 1983 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1984 * returns:
Yajirushi 0:3807ce385b2a 1985 * 0 温度計測に加速度センサーを使用している
Yajirushi 0:3807ce385b2a 1986 * 1 温度計測に角速度センサーを使用している
Yajirushi 0:3807ce385b2a 1987 */
Yajirushi 0:3807ce385b2a 1988 char BOARDC_BNO055::getTempSource(){
Yajirushi 0:3807ce385b2a 1989 return ctrl->rr(0, BNO055P0_TEMP_SOURCE);
Yajirushi 0:3807ce385b2a 1990 }
Yajirushi 0:3807ce385b2a 1991
Yajirushi 0:3807ce385b2a 1992 /* ==================================================================
Yajirushi 0:3807ce385b2a 1993 * システムの温度計測に使用するセンサーを選択する
Yajirushi 0:3807ce385b2a 1994 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1995 * 引数Accelerometer:
Yajirushi 0:3807ce385b2a 1996 * true:加速度センサーを温度計測に使用する
Yajirushi 0:3807ce385b2a 1997 * false:角速度センサーを温度計測に使用する
Yajirushi 0:3807ce385b2a 1998 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 1999 * returns:
Yajirushi 0:3807ce385b2a 2000 * -1 失敗
Yajirushi 0:3807ce385b2a 2001 * 1 成功
Yajirushi 0:3807ce385b2a 2002 */
Yajirushi 0:3807ce385b2a 2003 char BOARDC_BNO055::setTempSource(bool Accelerometer){
Yajirushi 0:3807ce385b2a 2004 return ctrl->wr(0, BNO055P0_TEMP_SOURCE, (Accelerometer) ? 0 : 1);
Yajirushi 0:3807ce385b2a 2005 }
Yajirushi 0:3807ce385b2a 2006
Yajirushi 0:3807ce385b2a 2007 /* ==================================================================
Yajirushi 0:3807ce385b2a 2008 * センサー出力軸交換情報の取得
Yajirushi 0:3807ce385b2a 2009 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2010 * returns:
Yajirushi 0:3807ce385b2a 2011 * AXIS_MAP_CONFIGの設定情報:BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2012 */
Yajirushi 0:3807ce385b2a 2013 char BOARDC_BNO055::getAxisMapConfig(){
Yajirushi 0:3807ce385b2a 2014 char ret = ctrl->rr(0, BNO055P0_AXIS_MAP_CONFIG);
Yajirushi 0:3807ce385b2a 2015 if(axisRemap != ret) axisRemap = ret;
Yajirushi 0:3807ce385b2a 2016 return axisRemap;
Yajirushi 0:3807ce385b2a 2017 }
Yajirushi 0:3807ce385b2a 2018
Yajirushi 0:3807ce385b2a 2019 /* ==================================================================
Yajirushi 0:3807ce385b2a 2020 * センサー出力軸交換の設定
Yajirushi 0:3807ce385b2a 2021 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2022 * 引数val:
Yajirushi 0:3807ce385b2a 2023 * X,Y,Zの出力交換の情報
Yajirushi 0:3807ce385b2a 2024 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2025 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2026 * returns:
Yajirushi 0:3807ce385b2a 2027 * -1 失敗
Yajirushi 0:3807ce385b2a 2028 * 0 変更なし
Yajirushi 0:3807ce385b2a 2029 * 1 成功
Yajirushi 0:3807ce385b2a 2030 */
Yajirushi 0:3807ce385b2a 2031 char BOARDC_BNO055::setAxisMapConfig(char val){
Yajirushi 0:3807ce385b2a 2032 if(axisRemap == (val & 0x3F)) return 0;
Yajirushi 0:3807ce385b2a 2033 else axisRemap = (val & 0x3F);
Yajirushi 0:3807ce385b2a 2034 return ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2035 }
Yajirushi 0:3807ce385b2a 2036
Yajirushi 0:3807ce385b2a 2037 /* ==================================================================
Yajirushi 0:3807ce385b2a 2038 * センサー出力軸符号情報の取得
Yajirushi 0:3807ce385b2a 2039 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2040 * returns:
Yajirushi 0:3807ce385b2a 2041 * AXIS_MAP_SIGNの設定情報:BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2042 */
Yajirushi 0:3807ce385b2a 2043 char BOARDC_BNO055::getAxisMapSign(){
Yajirushi 0:3807ce385b2a 2044 char ret = ctrl->rr(0, BNO055P0_AXIS_MAP_SIGN);
Yajirushi 0:3807ce385b2a 2045 if(axisSign != ret) axisSign = ret;
Yajirushi 0:3807ce385b2a 2046 return axisSign;
Yajirushi 0:3807ce385b2a 2047 }
Yajirushi 0:3807ce385b2a 2048
Yajirushi 0:3807ce385b2a 2049 /* ==================================================================
Yajirushi 0:3807ce385b2a 2050 * センサー出力軸符号の設定
Yajirushi 0:3807ce385b2a 2051 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2052 * 引数val:
Yajirushi 0:3807ce385b2a 2053 * X,Y,Zの出力符号の情報
Yajirushi 0:3807ce385b2a 2054 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2055 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2056 * returns:
Yajirushi 0:3807ce385b2a 2057 * -1 失敗
Yajirushi 0:3807ce385b2a 2058 * 0 変更なし
Yajirushi 0:3807ce385b2a 2059 * 1 成功
Yajirushi 0:3807ce385b2a 2060 */
Yajirushi 0:3807ce385b2a 2061 char BOARDC_BNO055::setAxisMapSign(char val){
Yajirushi 0:3807ce385b2a 2062 if(axisSign == (val & 0x07)) return 0;
Yajirushi 0:3807ce385b2a 2063 else axisSign = (val & 0x07);
Yajirushi 0:3807ce385b2a 2064 return ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2065 }
Yajirushi 0:3807ce385b2a 2066
Yajirushi 0:3807ce385b2a 2067 /* ==================================================================
Yajirushi 0:3807ce385b2a 2068 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側左上]
Yajirushi 0:3807ce385b2a 2069 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2070 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2071 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2072 * returns:
Yajirushi 0:3807ce385b2a 2073 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2074 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2075 * 1 成功
Yajirushi 0:3807ce385b2a 2076 */
Yajirushi 0:3807ce385b2a 2077 char BOARDC_BNO055::setAxisRemap_topview_topleft(){
Yajirushi 0:3807ce385b2a 2078 axisRemap = 0x21;
Yajirushi 0:3807ce385b2a 2079 axisSign = 0x04;
Yajirushi 0:3807ce385b2a 2080 char ret = 0;
Yajirushi 0:3807ce385b2a 2081 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2082 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2083 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2084 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2085 return 1;
Yajirushi 0:3807ce385b2a 2086 }
Yajirushi 0:3807ce385b2a 2087
Yajirushi 0:3807ce385b2a 2088 /* ==================================================================
Yajirushi 0:3807ce385b2a 2089 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側右上]
Yajirushi 0:3807ce385b2a 2090 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2091 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2092 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2093 * returns:
Yajirushi 0:3807ce385b2a 2094 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2095 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2096 * 1 成功
Yajirushi 0:3807ce385b2a 2097 */
Yajirushi 0:3807ce385b2a 2098 char BOARDC_BNO055::setAxisRemap_topview_topright(){
Yajirushi 0:3807ce385b2a 2099 axisRemap = 0x24;
Yajirushi 0:3807ce385b2a 2100 axisSign = 0x00;
Yajirushi 0:3807ce385b2a 2101 char ret = 0;
Yajirushi 0:3807ce385b2a 2102 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2103 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2104 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2105 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2106 return 1;
Yajirushi 0:3807ce385b2a 2107 }
Yajirushi 0:3807ce385b2a 2108
Yajirushi 0:3807ce385b2a 2109 /* ==================================================================
Yajirushi 0:3807ce385b2a 2110 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側左下]
Yajirushi 0:3807ce385b2a 2111 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2112 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2113 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2114 * returns:
Yajirushi 0:3807ce385b2a 2115 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2116 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2117 * 1 成功
Yajirushi 0:3807ce385b2a 2118 */
Yajirushi 0:3807ce385b2a 2119 char BOARDC_BNO055::setAxisRemap_topview_bottomleft(){
Yajirushi 0:3807ce385b2a 2120 axisRemap = 0x24;
Yajirushi 0:3807ce385b2a 2121 axisSign = 0x06;
Yajirushi 0:3807ce385b2a 2122 char ret = 0;
Yajirushi 0:3807ce385b2a 2123 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2124 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2125 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2126 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2127 return 1;
Yajirushi 0:3807ce385b2a 2128 }
Yajirushi 0:3807ce385b2a 2129
Yajirushi 0:3807ce385b2a 2130 /* ==================================================================
Yajirushi 0:3807ce385b2a 2131 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側右下]
Yajirushi 0:3807ce385b2a 2132 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2133 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2134 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2135 * returns:
Yajirushi 0:3807ce385b2a 2136 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2137 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2138 * 1 成功
Yajirushi 0:3807ce385b2a 2139 */
Yajirushi 0:3807ce385b2a 2140 char BOARDC_BNO055::setAxisRemap_topview_bottomright(){
Yajirushi 0:3807ce385b2a 2141 axisRemap = 0x21;
Yajirushi 0:3807ce385b2a 2142 axisSign = 0x02;
Yajirushi 0:3807ce385b2a 2143 char ret = 0;
Yajirushi 0:3807ce385b2a 2144 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2145 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2146 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2147 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2148 return 1;
Yajirushi 0:3807ce385b2a 2149 }
Yajirushi 0:3807ce385b2a 2150
Yajirushi 0:3807ce385b2a 2151 /* ==================================================================
Yajirushi 0:3807ce385b2a 2152 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側左上]
Yajirushi 0:3807ce385b2a 2153 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2154 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2155 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2156 * returns:
Yajirushi 0:3807ce385b2a 2157 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2158 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2159 * 1 成功
Yajirushi 0:3807ce385b2a 2160 */
Yajirushi 0:3807ce385b2a 2161 char BOARDC_BNO055::setAxisRemap_bottomview_topleft(){
Yajirushi 0:3807ce385b2a 2162 axisRemap = 0x24;
Yajirushi 0:3807ce385b2a 2163 axisSign = 0x03;
Yajirushi 0:3807ce385b2a 2164 char ret = 0;
Yajirushi 0:3807ce385b2a 2165 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2166 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2167 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2168 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2169 return 1;
Yajirushi 0:3807ce385b2a 2170 }
Yajirushi 0:3807ce385b2a 2171
Yajirushi 0:3807ce385b2a 2172 /* ==================================================================
Yajirushi 0:3807ce385b2a 2173 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側右上]
Yajirushi 0:3807ce385b2a 2174 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2175 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2176 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2177 * returns:
Yajirushi 0:3807ce385b2a 2178 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2179 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2180 * 1 成功
Yajirushi 0:3807ce385b2a 2181 */
Yajirushi 0:3807ce385b2a 2182 char BOARDC_BNO055::setAxisRemap_bottomview_topright(){
Yajirushi 0:3807ce385b2a 2183 axisRemap = 0x21;
Yajirushi 0:3807ce385b2a 2184 axisSign = 0x01;
Yajirushi 0:3807ce385b2a 2185 char ret = 0;
Yajirushi 0:3807ce385b2a 2186 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2187 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2188 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2189 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2190 return 1;
Yajirushi 0:3807ce385b2a 2191 }
Yajirushi 0:3807ce385b2a 2192
Yajirushi 0:3807ce385b2a 2193 /* ==================================================================
Yajirushi 0:3807ce385b2a 2194 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側左下]
Yajirushi 0:3807ce385b2a 2195 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2196 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2197 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2198 * returns:
Yajirushi 0:3807ce385b2a 2199 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2200 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2201 * 1 成功
Yajirushi 0:3807ce385b2a 2202 */
Yajirushi 0:3807ce385b2a 2203 char BOARDC_BNO055::setAxisRemap_bottomview_bottomleft(){
Yajirushi 0:3807ce385b2a 2204 axisRemap = 0x21;
Yajirushi 0:3807ce385b2a 2205 axisSign = 0x07;
Yajirushi 0:3807ce385b2a 2206 char ret = 0;
Yajirushi 0:3807ce385b2a 2207 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2208 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2209 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2210 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2211 return 1;
Yajirushi 0:3807ce385b2a 2212 }
Yajirushi 0:3807ce385b2a 2213
Yajirushi 0:3807ce385b2a 2214 /* ==================================================================
Yajirushi 0:3807ce385b2a 2215 * センサー出力軸の符号と交換を直感的に設定する[1pinが表側から見たとき裏側右下]
Yajirushi 0:3807ce385b2a 2216 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2217 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2218 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2219 * returns:
Yajirushi 0:3807ce385b2a 2220 * -1 AXIS_MAP_CONFIG設定の失敗
Yajirushi 0:3807ce385b2a 2221 * -2 AXIS_MAP_SIGN設定の失敗
Yajirushi 0:3807ce385b2a 2222 * 1 成功
Yajirushi 0:3807ce385b2a 2223 */
Yajirushi 0:3807ce385b2a 2224 char BOARDC_BNO055::setAxisRemap_bottomview_bottomright(){
Yajirushi 0:3807ce385b2a 2225 axisRemap = 0x24;
Yajirushi 0:3807ce385b2a 2226 axisSign = 0x05;
Yajirushi 0:3807ce385b2a 2227 char ret = 0;
Yajirushi 0:3807ce385b2a 2228 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_CONFIG, axisRemap);
Yajirushi 0:3807ce385b2a 2229 if(ret == -1) return -1;
Yajirushi 0:3807ce385b2a 2230 ret = ctrl->wr(0, BNO055P0_AXIS_MAP_SIGN, axisSign);
Yajirushi 0:3807ce385b2a 2231 if(ret == -1) return -2;
Yajirushi 0:3807ce385b2a 2232 return 1;
Yajirushi 0:3807ce385b2a 2233 }
Yajirushi 0:3807ce385b2a 2234
Yajirushi 0:3807ce385b2a 2235 /* ==================================================================
Yajirushi 0:3807ce385b2a 2236 * センサー出力軸の符号と交換の情報を直感的な形で取得する
Yajirushi 0:3807ce385b2a 2237 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2238 * (BNO055データシート [3.4 Axis remap] を参照
Yajirushi 0:3807ce385b2a 2239 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2240 * returns:
Yajirushi 0:3807ce385b2a 2241 * 0 [P0]表側から見たとき、BNO055の1pinが表側左上にある状態
Yajirushi 0:3807ce385b2a 2242 * 1 [P1]表側から見たとき、BNO055の1pinが表側右上にある状態
Yajirushi 0:3807ce385b2a 2243 * 2 [P2]表側から見たとき、BNO055の1pinが表側左下にある状態
Yajirushi 0:3807ce385b2a 2244 * 3 [P3]表側から見たとき、BNO055の1pinが表側右下にある状態
Yajirushi 0:3807ce385b2a 2245 * 4 [P4]表側から見たとき、BNO055の1pinが裏側左上にある状態
Yajirushi 0:3807ce385b2a 2246 * 5 [P5]表側から見たとき、BNO055の1pinが裏側右上にある状態
Yajirushi 0:3807ce385b2a 2247 * 6 [P6]表側から見たとき、BNO055の1pinが裏側左下にある状態
Yajirushi 0:3807ce385b2a 2248 * 7 [P7]表側から見たとき、BNO055の1pinが裏側右下にある状態
Yajirushi 0:3807ce385b2a 2249 * -1 それ以外の設定
Yajirushi 0:3807ce385b2a 2250 */
Yajirushi 0:3807ce385b2a 2251 char BOARDC_BNO055::getAxisRemap_type(){
Yajirushi 0:3807ce385b2a 2252 getAxisMapConfig(); //axisRemapに最新の値を格納
Yajirushi 0:3807ce385b2a 2253 getAxisMapSign(); //axisSignに最新の値を格納
Yajirushi 0:3807ce385b2a 2254
Yajirushi 0:3807ce385b2a 2255 if(axisRemap == 0x21){
Yajirushi 0:3807ce385b2a 2256 switch(axisSign){
Yajirushi 0:3807ce385b2a 2257 case 0x04:
Yajirushi 0:3807ce385b2a 2258 return 0;
Yajirushi 0:3807ce385b2a 2259 case 0x02:
Yajirushi 0:3807ce385b2a 2260 return 3;
Yajirushi 0:3807ce385b2a 2261 case 0x01:
Yajirushi 0:3807ce385b2a 2262 return 5;
Yajirushi 0:3807ce385b2a 2263 case 0x07:
Yajirushi 0:3807ce385b2a 2264 return 6;
Yajirushi 0:3807ce385b2a 2265 }
Yajirushi 0:3807ce385b2a 2266 }else if(axisRemap == 0x24){
Yajirushi 0:3807ce385b2a 2267 switch(axisSign){
Yajirushi 0:3807ce385b2a 2268 case 0x00:
Yajirushi 0:3807ce385b2a 2269 return 1;
Yajirushi 0:3807ce385b2a 2270 case 0x06:
Yajirushi 0:3807ce385b2a 2271 return 2;
Yajirushi 0:3807ce385b2a 2272 case 0x03:
Yajirushi 0:3807ce385b2a 2273 return 4;
Yajirushi 0:3807ce385b2a 2274 case 0x05:
Yajirushi 0:3807ce385b2a 2275 return 7;
Yajirushi 0:3807ce385b2a 2276 }
Yajirushi 0:3807ce385b2a 2277 }
Yajirushi 0:3807ce385b2a 2278
Yajirushi 0:3807ce385b2a 2279 return -1;
Yajirushi 0:3807ce385b2a 2280 }
Yajirushi 0:3807ce385b2a 2281
Yajirushi 0:3807ce385b2a 2282 /* ==================================================================
Yajirushi 0:3807ce385b2a 2283 * 加速度センサーの補正値を取得する
Yajirushi 0:3807ce385b2a 2284 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2285 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
Yajirushi 0:3807ce385b2a 2286 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
Yajirushi 0:3807ce385b2a 2287 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
Yajirushi 0:3807ce385b2a 2288 */
Yajirushi 0:3807ce385b2a 2289 void BOARDC_BNO055::getAccOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
Yajirushi 0:3807ce385b2a 2290 //連続6byte読み取り
Yajirushi 3:363ec3772dce 2291 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 2292 ctrl->rrc(0, BNO055P0_ACC_OFFSET_X_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 2293
Yajirushi 0:3807ce385b2a 2294 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2295 short offY = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 2296 short offZ = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 2297 offsetX = (1.0f * offX) * scaleACC;
Yajirushi 0:3807ce385b2a 2298 offsetY = (1.0f * offY) * scaleACC;
Yajirushi 0:3807ce385b2a 2299 offsetZ = (1.0f * offZ) * scaleACC;
Yajirushi 0:3807ce385b2a 2300 }
Yajirushi 0:3807ce385b2a 2301
Yajirushi 0:3807ce385b2a 2302 /* ==================================================================
Yajirushi 0:3807ce385b2a 2303 * 加速度センサーの補正値(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2304 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2305 * returns:
Yajirushi 0:3807ce385b2a 2306 * X軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2307 */
Yajirushi 0:3807ce385b2a 2308 float BOARDC_BNO055::getAccOffsetX(){
Yajirushi 0:3807ce385b2a 2309 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2310 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2311 ctrl->rrc(0, BNO055P0_ACC_OFFSET_X_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2312
Yajirushi 0:3807ce385b2a 2313 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2314 return (1.0f * offX) * scaleACC;
Yajirushi 0:3807ce385b2a 2315 }
Yajirushi 0:3807ce385b2a 2316
Yajirushi 0:3807ce385b2a 2317 /* ==================================================================
Yajirushi 0:3807ce385b2a 2318 * 加速度センサーの補正値(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2319 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2320 * returns:
Yajirushi 0:3807ce385b2a 2321 * Y軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2322 */
Yajirushi 0:3807ce385b2a 2323 float BOARDC_BNO055::getAccOffsetY(){
Yajirushi 0:3807ce385b2a 2324 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2325 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2326 ctrl->rrc(0, BNO055P0_ACC_OFFSET_Y_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2327
Yajirushi 0:3807ce385b2a 2328 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2329 return (1.0f * offX) * scaleACC;
Yajirushi 0:3807ce385b2a 2330 }
Yajirushi 0:3807ce385b2a 2331
Yajirushi 0:3807ce385b2a 2332 /* ==================================================================
Yajirushi 0:3807ce385b2a 2333 * 加速度センサーの補正値(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2334 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2335 * returns:
Yajirushi 0:3807ce385b2a 2336 * Z軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2337 */
Yajirushi 0:3807ce385b2a 2338 float BOARDC_BNO055::getAccOffsetZ(){
Yajirushi 0:3807ce385b2a 2339 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2340 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2341 ctrl->rrc(0, BNO055P0_ACC_OFFSET_Z_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2342
Yajirushi 0:3807ce385b2a 2343 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2344 return (1.0f * offX) * scaleACC;
Yajirushi 0:3807ce385b2a 2345 }
Yajirushi 0:3807ce385b2a 2346
Yajirushi 0:3807ce385b2a 2347 /* ==================================================================
Yajirushi 0:3807ce385b2a 2348 * 加速度センサーの補正値を設定する
Yajirushi 0:3807ce385b2a 2349 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2350 * offsetX: スケール乗算済みのX軸の補正値
Yajirushi 0:3807ce385b2a 2351 * offsetY: スケール乗算済みのY軸の補正値
Yajirushi 0:3807ce385b2a 2352 * offsetZ: スケール乗算済みのZ軸の補正値
Yajirushi 0:3807ce385b2a 2353 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2354 * returns:
Yajirushi 0:3807ce385b2a 2355 * -1 失敗
Yajirushi 0:3807ce385b2a 2356 * 1 成功
Yajirushi 0:3807ce385b2a 2357 */
Yajirushi 0:3807ce385b2a 2358 char BOARDC_BNO055::setAccOffsetAll(float offsetX, float offsetY, float offsetZ){
Yajirushi 0:3807ce385b2a 2359 short offX = (short)((offsetX / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2360 short offY = (short)((offsetY / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2361 short offZ = (short)((offsetZ / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2362 char msg[6];
Yajirushi 0:3807ce385b2a 2363 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2364 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2365 msg[2] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2366 msg[3] = offY >> 8;
Yajirushi 0:3807ce385b2a 2367 msg[4] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2368 msg[5] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2369
Yajirushi 0:3807ce385b2a 2370 //連続6byte書き込み
Yajirushi 0:3807ce385b2a 2371 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_X_LSB, msg, 6);
Yajirushi 0:3807ce385b2a 2372 }
Yajirushi 0:3807ce385b2a 2373
Yajirushi 0:3807ce385b2a 2374 char BOARDC_BNO055::setAccOffsetX(float offset){
Yajirushi 0:3807ce385b2a 2375 short offX = (short)((offset / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2376 char msg[2];
Yajirushi 0:3807ce385b2a 2377 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2378 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2379
Yajirushi 0:3807ce385b2a 2380 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2381 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_X_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2382 }
Yajirushi 0:3807ce385b2a 2383
Yajirushi 0:3807ce385b2a 2384 char BOARDC_BNO055::setAccOffsetY(float offset){
Yajirushi 0:3807ce385b2a 2385 short offY = (short)((offset / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2386 char msg[2];
Yajirushi 0:3807ce385b2a 2387 msg[0] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2388 msg[1] = offY >> 8;
Yajirushi 0:3807ce385b2a 2389
Yajirushi 0:3807ce385b2a 2390 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2391 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_Y_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2392 }
Yajirushi 0:3807ce385b2a 2393
Yajirushi 0:3807ce385b2a 2394 char BOARDC_BNO055::setAccOffsetZ(float offset){
Yajirushi 0:3807ce385b2a 2395 short offZ = (short)((offset / scaleACC) + 0.5f);
Yajirushi 0:3807ce385b2a 2396 char msg[2];
Yajirushi 0:3807ce385b2a 2397 msg[0] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2398 msg[1] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2399
Yajirushi 0:3807ce385b2a 2400 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2401 return ctrl->wrc(0, BNO055P0_ACC_OFFSET_Z_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2402 }
Yajirushi 0:3807ce385b2a 2403
Yajirushi 0:3807ce385b2a 2404 /* ==================================================================
Yajirushi 0:3807ce385b2a 2405 * 地磁気センサーの補正値を取得する
Yajirushi 0:3807ce385b2a 2406 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2407 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
Yajirushi 0:3807ce385b2a 2408 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
Yajirushi 0:3807ce385b2a 2409 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
Yajirushi 0:3807ce385b2a 2410 */
Yajirushi 0:3807ce385b2a 2411 void BOARDC_BNO055::getMagOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
Yajirushi 0:3807ce385b2a 2412 //連続6byte読み取り
Yajirushi 3:363ec3772dce 2413 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 2414 ctrl->rrc(0, BNO055P0_MAG_OFFSET_X_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 2415
Yajirushi 0:3807ce385b2a 2416 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2417 short offY = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 2418 short offZ = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 2419 offsetX = (1.0f * offX) * scaleMAG;
Yajirushi 0:3807ce385b2a 2420 offsetY = (1.0f * offY) * scaleMAG;
Yajirushi 0:3807ce385b2a 2421 offsetZ = (1.0f * offZ) * scaleMAG;
Yajirushi 0:3807ce385b2a 2422 }
Yajirushi 0:3807ce385b2a 2423
Yajirushi 0:3807ce385b2a 2424 /* ==================================================================
Yajirushi 0:3807ce385b2a 2425 * 地磁気センサーの補正値(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2426 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2427 * returns:
Yajirushi 0:3807ce385b2a 2428 * X軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2429 */
Yajirushi 0:3807ce385b2a 2430 float BOARDC_BNO055::getMagOffsetX(){
Yajirushi 0:3807ce385b2a 2431 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2432 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2433 ctrl->rrc(0, BNO055P0_MAG_OFFSET_X_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2434
Yajirushi 0:3807ce385b2a 2435 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2436 return (1.0f * offX) * scaleMAG;
Yajirushi 0:3807ce385b2a 2437 }
Yajirushi 0:3807ce385b2a 2438
Yajirushi 0:3807ce385b2a 2439 /* ==================================================================
Yajirushi 0:3807ce385b2a 2440 * 地磁気センサーの補正値(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2441 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2442 * returns:
Yajirushi 0:3807ce385b2a 2443 * Y軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2444 */
Yajirushi 0:3807ce385b2a 2445 float BOARDC_BNO055::getMagOffsetY(){
Yajirushi 0:3807ce385b2a 2446 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2447 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2448 ctrl->rrc(0, BNO055P0_MAG_OFFSET_Y_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2449
Yajirushi 0:3807ce385b2a 2450 short offY = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2451 return (1.0f * offY) * scaleMAG;
Yajirushi 0:3807ce385b2a 2452 }
Yajirushi 0:3807ce385b2a 2453
Yajirushi 0:3807ce385b2a 2454 /* ==================================================================
Yajirushi 0:3807ce385b2a 2455 * 地磁気センサーの補正値(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2456 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2457 * returns:
Yajirushi 0:3807ce385b2a 2458 * Z軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2459 */
Yajirushi 0:3807ce385b2a 2460 float BOARDC_BNO055::getMagOffsetZ(){
Yajirushi 0:3807ce385b2a 2461 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2462 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2463 ctrl->rrc(0, BNO055P0_MAG_OFFSET_Z_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2464
Yajirushi 0:3807ce385b2a 2465 short offZ = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2466 return (1.0f * offZ) * scaleMAG;
Yajirushi 0:3807ce385b2a 2467 }
Yajirushi 0:3807ce385b2a 2468
Yajirushi 0:3807ce385b2a 2469 /* ==================================================================
Yajirushi 0:3807ce385b2a 2470 * 地磁気センサーの補正値を設定する
Yajirushi 0:3807ce385b2a 2471 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2472 * offsetX: スケール乗算済みのX軸の補正値
Yajirushi 0:3807ce385b2a 2473 * offsetY: スケール乗算済みのY軸の補正値
Yajirushi 0:3807ce385b2a 2474 * offsetZ: スケール乗算済みのZ軸の補正値
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::setMagOffsetAll(float offsetX, float offsetY, float offsetZ){
Yajirushi 0:3807ce385b2a 2481 short offX = (short)((offsetX / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2482 short offY = (short)((offsetY / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2483 short offZ = (short)((offsetZ / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2484 char msg[6];
Yajirushi 0:3807ce385b2a 2485 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2486 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2487 msg[2] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2488 msg[3] = offY >> 8;
Yajirushi 0:3807ce385b2a 2489 msg[4] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2490 msg[5] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2491
Yajirushi 0:3807ce385b2a 2492 //連続6byte書き込み
Yajirushi 0:3807ce385b2a 2493 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_X_LSB, msg, 6);
Yajirushi 0:3807ce385b2a 2494 }
Yajirushi 0:3807ce385b2a 2495
Yajirushi 0:3807ce385b2a 2496 /* ==================================================================
Yajirushi 0:3807ce385b2a 2497 * 地磁気センサーの補正値(X軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2498 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2499 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2500 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2501 * returns:
Yajirushi 0:3807ce385b2a 2502 * -1 失敗
Yajirushi 0:3807ce385b2a 2503 * 1 成功
Yajirushi 0:3807ce385b2a 2504 */
Yajirushi 0:3807ce385b2a 2505 char BOARDC_BNO055::setMagOffsetX(float offset){
Yajirushi 0:3807ce385b2a 2506 short offX = (short)((offset / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2507 char msg[2];
Yajirushi 0:3807ce385b2a 2508 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2509 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2510
Yajirushi 0:3807ce385b2a 2511 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2512 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_X_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2513 }
Yajirushi 0:3807ce385b2a 2514
Yajirushi 0:3807ce385b2a 2515 /* ==================================================================
Yajirushi 0:3807ce385b2a 2516 * 地磁気センサーの補正値(Y軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2517 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2518 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2519 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2520 * returns:
Yajirushi 0:3807ce385b2a 2521 * -1 失敗
Yajirushi 0:3807ce385b2a 2522 * 1 成功
Yajirushi 0:3807ce385b2a 2523 */
Yajirushi 0:3807ce385b2a 2524 char BOARDC_BNO055::setMagOffsetY(float offset){
Yajirushi 0:3807ce385b2a 2525 short offY = (short)((offset / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2526 char msg[2];
Yajirushi 0:3807ce385b2a 2527 msg[0] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2528 msg[1] = offY >> 8;
Yajirushi 0:3807ce385b2a 2529
Yajirushi 0:3807ce385b2a 2530 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2531 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_Y_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2532 }
Yajirushi 0:3807ce385b2a 2533
Yajirushi 0:3807ce385b2a 2534 /* ==================================================================
Yajirushi 0:3807ce385b2a 2535 * 地磁気センサーの補正値(Z軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2536 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2537 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2538 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2539 * returns:
Yajirushi 0:3807ce385b2a 2540 * -1 失敗
Yajirushi 0:3807ce385b2a 2541 * 1 成功
Yajirushi 0:3807ce385b2a 2542 */
Yajirushi 0:3807ce385b2a 2543 char BOARDC_BNO055::setMagOffsetZ(float offset){
Yajirushi 0:3807ce385b2a 2544 short offZ = (short)((offset / scaleMAG) + 0.5f);
Yajirushi 0:3807ce385b2a 2545 char msg[2];
Yajirushi 0:3807ce385b2a 2546 msg[0] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2547 msg[1] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2548
Yajirushi 0:3807ce385b2a 2549 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2550 return ctrl->wrc(0, BNO055P0_MAG_OFFSET_Z_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2551 }
Yajirushi 0:3807ce385b2a 2552
Yajirushi 0:3807ce385b2a 2553 /* ==================================================================
Yajirushi 0:3807ce385b2a 2554 * 角速度センサーの補正値を取得する
Yajirushi 0:3807ce385b2a 2555 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2556 * &offsetX: アドレス参照引数:関数実行後、この変数にX軸補正値が格納される
Yajirushi 0:3807ce385b2a 2557 * &offsetY: アドレス参照引数:関数実行後、この変数にY軸補正値が格納される
Yajirushi 0:3807ce385b2a 2558 * &offsetZ: アドレス参照引数:関数実行後、この変数にZ軸補正値が格納される
Yajirushi 0:3807ce385b2a 2559 */
Yajirushi 0:3807ce385b2a 2560 void BOARDC_BNO055::getGyroOffsetAll(float &offsetX, float &offsetY, float &offsetZ){
Yajirushi 0:3807ce385b2a 2561 //連続6byte読み取り
Yajirushi 3:363ec3772dce 2562 unsigned char rsv[6];
Yajirushi 0:3807ce385b2a 2563 ctrl->rrc(0, BNO055P0_GYR_OFFSET_X_LSB, rsv, 6);
Yajirushi 0:3807ce385b2a 2564
Yajirushi 0:3807ce385b2a 2565 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2566 short offY = (rsv[3] << 8) | rsv[2];
Yajirushi 0:3807ce385b2a 2567 short offZ = (rsv[5] << 8) | rsv[4];
Yajirushi 0:3807ce385b2a 2568 offsetX = (1.0f * offX) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2569 offsetY = (1.0f * offY) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2570 offsetZ = (1.0f * offZ) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2571 }
Yajirushi 0:3807ce385b2a 2572
Yajirushi 0:3807ce385b2a 2573 /* ==================================================================
Yajirushi 0:3807ce385b2a 2574 * 角速度センサーの補正値(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2575 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2576 * returns:
Yajirushi 0:3807ce385b2a 2577 * X軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2578 */
Yajirushi 0:3807ce385b2a 2579 float BOARDC_BNO055::getGyroOffsetX(){
Yajirushi 0:3807ce385b2a 2580 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2581 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2582 ctrl->rrc(0, BNO055P0_GYR_OFFSET_X_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2583
Yajirushi 0:3807ce385b2a 2584 short offX = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2585 return (1.0f * offX) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2586 }
Yajirushi 0:3807ce385b2a 2587
Yajirushi 0:3807ce385b2a 2588 /* ==================================================================
Yajirushi 0:3807ce385b2a 2589 * 角速度センサーの補正値(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2590 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2591 * returns:
Yajirushi 0:3807ce385b2a 2592 * Y軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2593 */
Yajirushi 0:3807ce385b2a 2594 float BOARDC_BNO055::getGyroOffsetY(){
Yajirushi 0:3807ce385b2a 2595 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2596 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2597 ctrl->rrc(0, BNO055P0_GYR_OFFSET_Y_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2598
Yajirushi 0:3807ce385b2a 2599 short offY = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2600 return (1.0f * offY) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2601 }
Yajirushi 0:3807ce385b2a 2602
Yajirushi 0:3807ce385b2a 2603 /* ==================================================================
Yajirushi 0:3807ce385b2a 2604 * 角速度センサーの補正値(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 2605 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2606 * returns:
Yajirushi 0:3807ce385b2a 2607 * Z軸補正値(スケール乗算済み)
Yajirushi 0:3807ce385b2a 2608 */
Yajirushi 0:3807ce385b2a 2609 float BOARDC_BNO055::getGyroOffsetZ(){
Yajirushi 0:3807ce385b2a 2610 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2611 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2612 ctrl->rrc(0, BNO055P0_GYR_OFFSET_Z_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2613
Yajirushi 0:3807ce385b2a 2614 short offZ = (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2615 return (1.0f * offZ) * scaleGYRO;
Yajirushi 0:3807ce385b2a 2616 }
Yajirushi 0:3807ce385b2a 2617
Yajirushi 0:3807ce385b2a 2618 /* ==================================================================
Yajirushi 0:3807ce385b2a 2619 * 角速度センサーの補正値を設定する
Yajirushi 0:3807ce385b2a 2620 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2621 * offsetX: スケール乗算済みのX軸の補正値
Yajirushi 0:3807ce385b2a 2622 * offsetY: スケール乗算済みのY軸の補正値
Yajirushi 0:3807ce385b2a 2623 * offsetZ: スケール乗算済みのZ軸の補正値
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::setGyroOffsetAll(float offsetX, float offsetY, float offsetZ){
Yajirushi 0:3807ce385b2a 2630 short offX = (short)((offsetX / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2631 short offY = (short)((offsetY / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2632 short offZ = (short)((offsetZ / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2633 char msg[6];
Yajirushi 0:3807ce385b2a 2634 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2635 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2636 msg[2] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2637 msg[3] = offY >> 8;
Yajirushi 0:3807ce385b2a 2638 msg[4] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2639 msg[5] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2640
Yajirushi 0:3807ce385b2a 2641 //連続6byte書き込み
Yajirushi 0:3807ce385b2a 2642 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_X_LSB, msg, 6);
Yajirushi 0:3807ce385b2a 2643 }
Yajirushi 0:3807ce385b2a 2644
Yajirushi 0:3807ce385b2a 2645 /* ==================================================================
Yajirushi 0:3807ce385b2a 2646 * 角速度センサーの補正値(X軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2647 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2648 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2649 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2650 * returns:
Yajirushi 0:3807ce385b2a 2651 * -1 失敗
Yajirushi 0:3807ce385b2a 2652 * 1 成功
Yajirushi 0:3807ce385b2a 2653 */
Yajirushi 0:3807ce385b2a 2654 char BOARDC_BNO055::setGyroOffsetX(float offset){
Yajirushi 0:3807ce385b2a 2655 short offX = (short)((offset / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2656 char msg[2];
Yajirushi 0:3807ce385b2a 2657 msg[0] = offX & 0xFF;
Yajirushi 0:3807ce385b2a 2658 msg[1] = offX >> 8;
Yajirushi 0:3807ce385b2a 2659
Yajirushi 0:3807ce385b2a 2660 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2661 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_X_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2662 }
Yajirushi 0:3807ce385b2a 2663
Yajirushi 0:3807ce385b2a 2664 /* ==================================================================
Yajirushi 0:3807ce385b2a 2665 * 角速度センサーの補正値(Y軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2666 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2667 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2668 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2669 * returns:
Yajirushi 0:3807ce385b2a 2670 * -1 失敗
Yajirushi 0:3807ce385b2a 2671 * 1 成功
Yajirushi 0:3807ce385b2a 2672 */
Yajirushi 0:3807ce385b2a 2673 char BOARDC_BNO055::setGyroOffsetY(float offset){
Yajirushi 0:3807ce385b2a 2674 short offY = (short)((offset / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2675 char msg[2];
Yajirushi 0:3807ce385b2a 2676 msg[0] = offY & 0xFF;
Yajirushi 0:3807ce385b2a 2677 msg[1] = offY >> 8;
Yajirushi 0:3807ce385b2a 2678
Yajirushi 0:3807ce385b2a 2679 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2680 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_Y_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2681 }
Yajirushi 0:3807ce385b2a 2682
Yajirushi 0:3807ce385b2a 2683 /* ==================================================================
Yajirushi 0:3807ce385b2a 2684 * 角速度センサーの補正値(Z軸のみ)を設定する
Yajirushi 0:3807ce385b2a 2685 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2686 * offset: スケール乗算済みの補正値
Yajirushi 0:3807ce385b2a 2687 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2688 * returns:
Yajirushi 0:3807ce385b2a 2689 * -1 失敗
Yajirushi 0:3807ce385b2a 2690 * 1 成功
Yajirushi 0:3807ce385b2a 2691 */
Yajirushi 0:3807ce385b2a 2692 char BOARDC_BNO055::setGyroOffsetZ(float offset){
Yajirushi 0:3807ce385b2a 2693 short offZ = (short)((offset / scaleGYRO) + 0.5f);
Yajirushi 0:3807ce385b2a 2694 char msg[2];
Yajirushi 0:3807ce385b2a 2695 msg[0] = offZ & 0xFF;
Yajirushi 0:3807ce385b2a 2696 msg[1] = offZ >> 8;
Yajirushi 0:3807ce385b2a 2697
Yajirushi 0:3807ce385b2a 2698 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2699 return ctrl->wrc(0, BNO055P0_GYR_OFFSET_Z_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2700 }
Yajirushi 0:3807ce385b2a 2701
Yajirushi 0:3807ce385b2a 2702 /* ==================================================================
Yajirushi 0:3807ce385b2a 2703 * 加速度センサーのデータ出力範囲[単位:LSB]を取得する
Yajirushi 0:3807ce385b2a 2704 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2705 * returns:
Yajirushi 0:3807ce385b2a 2706 * +-データ計測範囲[単位:LSB]
Yajirushi 0:3807ce385b2a 2707 */
Yajirushi 0:3807ce385b2a 2708 short BOARDC_BNO055::getAccRadius(){
Yajirushi 0:3807ce385b2a 2709 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2710 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2711 ctrl->rrc(0, BNO055P0_ACC_RADIUS_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2712
Yajirushi 0:3807ce385b2a 2713 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2714 }
Yajirushi 0:3807ce385b2a 2715
Yajirushi 0:3807ce385b2a 2716 /* ==================================================================
Yajirushi 0:3807ce385b2a 2717 * 加速度センサーのデータ出力範囲[単位:LSB]を設定する
Yajirushi 0:3807ce385b2a 2718 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2719 * 引数r: データ計測範囲の最大値および最低値(-r から +r の範囲が計測範囲)
Yajirushi 0:3807ce385b2a 2720 * 最大値は1000[LSB]
Yajirushi 0:3807ce385b2a 2721 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2722 * returns:
Yajirushi 0:3807ce385b2a 2723 * -1 失敗
Yajirushi 0:3807ce385b2a 2724 * 1 成功
Yajirushi 0:3807ce385b2a 2725 */
Yajirushi 0:3807ce385b2a 2726 char BOARDC_BNO055::setAccRadius(short LSB){
Yajirushi 0:3807ce385b2a 2727 if(LSB > 1000) LSB = 1000;
Yajirushi 0:3807ce385b2a 2728
Yajirushi 0:3807ce385b2a 2729 char msg[2];
Yajirushi 0:3807ce385b2a 2730 msg[0] = LSB & 0xFF;
Yajirushi 0:3807ce385b2a 2731 msg[1] = LSB >> 8;
Yajirushi 0:3807ce385b2a 2732
Yajirushi 0:3807ce385b2a 2733 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2734 return ctrl->wrc(0, BNO055P0_ACC_RADIUS_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2735 }
Yajirushi 0:3807ce385b2a 2736
Yajirushi 0:3807ce385b2a 2737 /* ==================================================================
Yajirushi 0:3807ce385b2a 2738 * 地磁気センサーのデータ出力範囲[単位:LSB]を取得する
Yajirushi 0:3807ce385b2a 2739 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2740 * returns:
Yajirushi 0:3807ce385b2a 2741 * +-データ計測範囲
Yajirushi 0:3807ce385b2a 2742 */
Yajirushi 0:3807ce385b2a 2743 short BOARDC_BNO055::getMagRadius(){
Yajirushi 0:3807ce385b2a 2744 //連続2byte読み取り
Yajirushi 3:363ec3772dce 2745 unsigned char rsv[2];
Yajirushi 0:3807ce385b2a 2746 ctrl->rrc(0, BNO055P0_MAG_RADIUS_LSB, rsv, 2);
Yajirushi 0:3807ce385b2a 2747
Yajirushi 0:3807ce385b2a 2748 return (rsv[1] << 8) | rsv[0];
Yajirushi 0:3807ce385b2a 2749 }
Yajirushi 0:3807ce385b2a 2750
Yajirushi 0:3807ce385b2a 2751 /* ==================================================================
Yajirushi 0:3807ce385b2a 2752 * 加速度センサーのデータ出力範囲[単位:LSB]を設定する
Yajirushi 0:3807ce385b2a 2753 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2754 * 引数r: データ計測範囲の最大値および最低値(-r から +r の範囲が計測範囲)
Yajirushi 0:3807ce385b2a 2755 * 最大値は960[LSB]
Yajirushi 0:3807ce385b2a 2756 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2757 * returns:
Yajirushi 0:3807ce385b2a 2758 * -1 失敗
Yajirushi 0:3807ce385b2a 2759 * 1 成功
Yajirushi 0:3807ce385b2a 2760 */
Yajirushi 0:3807ce385b2a 2761 char BOARDC_BNO055::setMagRadius(short LSB){
Yajirushi 0:3807ce385b2a 2762 if(LSB > 960) LSB = 960;
Yajirushi 0:3807ce385b2a 2763
Yajirushi 0:3807ce385b2a 2764 char msg[2];
Yajirushi 0:3807ce385b2a 2765 msg[0] = LSB & 0xFF;
Yajirushi 0:3807ce385b2a 2766 msg[1] = LSB >> 8;
Yajirushi 0:3807ce385b2a 2767
Yajirushi 0:3807ce385b2a 2768 //連続2byte書き込み
Yajirushi 0:3807ce385b2a 2769 return ctrl->wrc(0, BNO055P0_MAG_RADIUS_LSB, msg, 2);
Yajirushi 0:3807ce385b2a 2770 }
Yajirushi 0:3807ce385b2a 2771
Yajirushi 0:3807ce385b2a 2772 /* ==================================================================
Yajirushi 0:3807ce385b2a 2773 * 加速度センサー設定のレジスタ値を取得する
Yajirushi 0:3807ce385b2a 2774 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2775 * returns:
Yajirushi 0:3807ce385b2a 2776 * 加速度センサー設定のレジスタ値
Yajirushi 0:3807ce385b2a 2777 */
Yajirushi 0:3807ce385b2a 2778 char BOARDC_BNO055::getAccConfig(){
Yajirushi 0:3807ce385b2a 2779 return ctrl->rr(1, BNO055P1_ACC_CONFIG);
Yajirushi 0:3807ce385b2a 2780 }
Yajirushi 0:3807ce385b2a 2781
Yajirushi 0:3807ce385b2a 2782 /* ==================================================================
Yajirushi 0:3807ce385b2a 2783 * 加速度センサー設定のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2784 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2785 * 引数regVal: 加速度センサー設定のレジスタ値
Yajirushi 0:3807ce385b2a 2786 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2787 * returns:
Yajirushi 0:3807ce385b2a 2788 * -1 失敗
Yajirushi 0:3807ce385b2a 2789 * 1 成功
Yajirushi 0:3807ce385b2a 2790 */
Yajirushi 0:3807ce385b2a 2791 char BOARDC_BNO055::setAccConfig(char regVal){
Yajirushi 0:3807ce385b2a 2792 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 2793 }
Yajirushi 0:3807ce385b2a 2794
Yajirushi 0:3807ce385b2a 2795 /* ==================================================================
Yajirushi 0:3807ce385b2a 2796 * 加速度センサー設定のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2797 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2798 * 引数gRange: 加速度センサーの計測範囲
Yajirushi 0:3807ce385b2a 2799 * 引数bandWidth: 加速度センサー出力レート(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2800 * 引数powMode: 加速度センサー電源設定(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2801 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2802 * returns:
Yajirushi 0:3807ce385b2a 2803 * -1 失敗
Yajirushi 0:3807ce385b2a 2804 * 1 成功
Yajirushi 0:3807ce385b2a 2805 */
Yajirushi 0:3807ce385b2a 2806 char BOARDC_BNO055::setAccConfig(char gRange, char bandWidth, char powMode){
Yajirushi 0:3807ce385b2a 2807 char regVal = (powMode << 5) | (bandWidth << 2) | gRange;
Yajirushi 0:3807ce385b2a 2808 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 2809 }
Yajirushi 0:3807ce385b2a 2810
Yajirushi 0:3807ce385b2a 2811 /* ==================================================================
Yajirushi 0:3807ce385b2a 2812 * 加速度センサーの計測範囲を設定する
Yajirushi 0:3807ce385b2a 2813 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2814 * 引数G: 加速度センサーの計測範囲(+-2, 4, 8, 16Gのいずれか)
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::setAccRange(unsigned char G){
Yajirushi 0:3807ce385b2a 2821 char val = 0;
Yajirushi 0:3807ce385b2a 2822 switch(G){
Yajirushi 0:3807ce385b2a 2823 case 2:
Yajirushi 0:3807ce385b2a 2824 val = 0x00;
Yajirushi 0:3807ce385b2a 2825 break;
Yajirushi 0:3807ce385b2a 2826 case 4:
Yajirushi 0:3807ce385b2a 2827 val = 0x01;
Yajirushi 0:3807ce385b2a 2828 break;
Yajirushi 0:3807ce385b2a 2829 case 8:
Yajirushi 0:3807ce385b2a 2830 val = 0x02;
Yajirushi 0:3807ce385b2a 2831 break;
Yajirushi 0:3807ce385b2a 2832 case 16:
Yajirushi 0:3807ce385b2a 2833 val = 0x03;
Yajirushi 0:3807ce385b2a 2834 break;
Yajirushi 0:3807ce385b2a 2835 default:
Yajirushi 0:3807ce385b2a 2836 val = 0x02;
Yajirushi 0:3807ce385b2a 2837 }
Yajirushi 0:3807ce385b2a 2838
Yajirushi 0:3807ce385b2a 2839 char regVal = ctrl->rr(1, BNO055P1_ACC_CONFIG);
Yajirushi 0:3807ce385b2a 2840 regVal = (regVal & 0xFC) | val;
Yajirushi 0:3807ce385b2a 2841
Yajirushi 0:3807ce385b2a 2842 return ctrl->wr(1, BNO055P1_ACC_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 2843 }
Yajirushi 0:3807ce385b2a 2844
Yajirushi 0:3807ce385b2a 2845 /* ==================================================================
Yajirushi 0:3807ce385b2a 2846 * 地磁気センサー設定のレジスタ値を取得する
Yajirushi 0:3807ce385b2a 2847 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2848 * returns:
Yajirushi 0:3807ce385b2a 2849 * 地磁気センサー設定のレジスタ値
Yajirushi 0:3807ce385b2a 2850 */
Yajirushi 0:3807ce385b2a 2851 char BOARDC_BNO055::getMagConfig(){
Yajirushi 0:3807ce385b2a 2852 return ctrl->rr(1, BNO055P1_MAG_CONFIG);
Yajirushi 0:3807ce385b2a 2853 }
Yajirushi 0:3807ce385b2a 2854
Yajirushi 0:3807ce385b2a 2855 /* ==================================================================
Yajirushi 0:3807ce385b2a 2856 * 地磁気センサー設定のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2857 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2858 * 引数regVal: 地磁気センサー設定のレジスタ値
Yajirushi 0:3807ce385b2a 2859 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2860 * returns:
Yajirushi 0:3807ce385b2a 2861 * -1 失敗
Yajirushi 0:3807ce385b2a 2862 * 1 成功
Yajirushi 0:3807ce385b2a 2863 */
Yajirushi 0:3807ce385b2a 2864 char BOARDC_BNO055::setMagConfig(char regVal){
Yajirushi 0:3807ce385b2a 2865 return ctrl->wr(1, BNO055P1_MAG_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 2866 }
Yajirushi 0:3807ce385b2a 2867
Yajirushi 0:3807ce385b2a 2868 /* ==================================================================
Yajirushi 0:3807ce385b2a 2869 * 地磁気センサー設定のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2870 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2871 * 引数rate: 地磁気センサー出力レート(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2872 * 引数oprMode: 地磁気センサー出力モード(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2873 * 引数powMode: 地磁気センサー電源設定(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2874 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2875 * returns:
Yajirushi 0:3807ce385b2a 2876 * -1 失敗
Yajirushi 0:3807ce385b2a 2877 * 1 成功
Yajirushi 0:3807ce385b2a 2878 */
Yajirushi 0:3807ce385b2a 2879 char BOARDC_BNO055::setMagConfig(char rate, char oprMode, char powMode){
Yajirushi 0:3807ce385b2a 2880 char regVal = powMode << 5 | oprMode << 3 | rate;
Yajirushi 0:3807ce385b2a 2881 return ctrl->wr(1, BNO055P1_MAG_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 2882 }
Yajirushi 0:3807ce385b2a 2883
Yajirushi 0:3807ce385b2a 2884 /* ==================================================================
Yajirushi 0:3807ce385b2a 2885 * 角速度センサー設定(0)のレジスタ値を取得する
Yajirushi 0:3807ce385b2a 2886 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2887 * returns:
Yajirushi 0:3807ce385b2a 2888 * 角速度センサー設定(0)のレジスタ値
Yajirushi 0:3807ce385b2a 2889 */
Yajirushi 0:3807ce385b2a 2890 char BOARDC_BNO055::getGyroConfig_0(){
Yajirushi 0:3807ce385b2a 2891 return ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
Yajirushi 0:3807ce385b2a 2892 }
Yajirushi 0:3807ce385b2a 2893
Yajirushi 0:3807ce385b2a 2894 /* ==================================================================
Yajirushi 0:3807ce385b2a 2895 * 角速度センサー設定(0)のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2896 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2897 * 引数regVal: 角速度センサー設定(0)のレジスタ値
Yajirushi 0:3807ce385b2a 2898 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2899 * returns:
Yajirushi 0:3807ce385b2a 2900 * -1 失敗
Yajirushi 0:3807ce385b2a 2901 * 1 成功
Yajirushi 0:3807ce385b2a 2902 */
Yajirushi 0:3807ce385b2a 2903 char BOARDC_BNO055::setGyroConfig_0(char regVal){
Yajirushi 0:3807ce385b2a 2904 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
Yajirushi 0:3807ce385b2a 2905 }
Yajirushi 0:3807ce385b2a 2906
Yajirushi 0:3807ce385b2a 2907 /* ==================================================================
Yajirushi 0:3807ce385b2a 2908 * 角速度センサー設定(0)のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2909 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2910 * 引数range: 角速度センサーの計測範囲(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2911 * 引数bandWidth: 角速度センサー出力レート(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2912 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2913 * returns:
Yajirushi 0:3807ce385b2a 2914 * -1 失敗
Yajirushi 0:3807ce385b2a 2915 * 1 成功
Yajirushi 0:3807ce385b2a 2916 */
Yajirushi 0:3807ce385b2a 2917 char BOARDC_BNO055::setGyroConfig_0(char range, char bandWidth){
Yajirushi 0:3807ce385b2a 2918 char regVal = bandWidth << 3 | range;
Yajirushi 0:3807ce385b2a 2919 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
Yajirushi 0:3807ce385b2a 2920 }
Yajirushi 0:3807ce385b2a 2921
Yajirushi 0:3807ce385b2a 2922 /* ==================================================================
Yajirushi 0:3807ce385b2a 2923 * 角速度センサー設定(1)のレジスタ値を取得する
Yajirushi 0:3807ce385b2a 2924 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2925 * returns:
Yajirushi 0:3807ce385b2a 2926 * 角速度センサー設定(1)のレジスタ値
Yajirushi 0:3807ce385b2a 2927 */
Yajirushi 0:3807ce385b2a 2928 char BOARDC_BNO055::getGyroConfig_1(){
Yajirushi 0:3807ce385b2a 2929 return ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
Yajirushi 0:3807ce385b2a 2930 }
Yajirushi 0:3807ce385b2a 2931
Yajirushi 0:3807ce385b2a 2932 /* ==================================================================
Yajirushi 0:3807ce385b2a 2933 * 角速度センサー設定(1)のレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2934 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2935 * 引数powMode: 角速度センサーの電源設定(Fusion時は自動設定)
Yajirushi 0:3807ce385b2a 2936 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2937 * returns:
Yajirushi 0:3807ce385b2a 2938 * -1 失敗
Yajirushi 0:3807ce385b2a 2939 * 1 成功
Yajirushi 0:3807ce385b2a 2940 */
Yajirushi 0:3807ce385b2a 2941 char BOARDC_BNO055::setGyroConfig_1(char powMode){
Yajirushi 0:3807ce385b2a 2942 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, powMode & 0x07);
Yajirushi 0:3807ce385b2a 2943 }
Yajirushi 0:3807ce385b2a 2944
Yajirushi 0:3807ce385b2a 2945 /* ==================================================================
Yajirushi 0:3807ce385b2a 2946 * 角速度センサーの計測範囲を設定する
Yajirushi 0:3807ce385b2a 2947 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2948 * 引数G: 角速度センサーの計測範囲(2000, 1000, 500, 250, 125dpsのいずれか)
Yajirushi 0:3807ce385b2a 2949 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2950 * returns:
Yajirushi 0:3807ce385b2a 2951 * -1 失敗
Yajirushi 0:3807ce385b2a 2952 * 1 成功
Yajirushi 0:3807ce385b2a 2953 */
Yajirushi 0:3807ce385b2a 2954 char BOARDC_BNO055::setGyroRange(unsigned short dps){
Yajirushi 0:3807ce385b2a 2955 char val = 0;
Yajirushi 0:3807ce385b2a 2956 switch(dps){
Yajirushi 0:3807ce385b2a 2957 case 2000:
Yajirushi 0:3807ce385b2a 2958 val = 0;
Yajirushi 0:3807ce385b2a 2959 break;
Yajirushi 0:3807ce385b2a 2960 case 1000:
Yajirushi 0:3807ce385b2a 2961 val = 1;
Yajirushi 0:3807ce385b2a 2962 break;
Yajirushi 0:3807ce385b2a 2963 case 500:
Yajirushi 0:3807ce385b2a 2964 val = 2;
Yajirushi 0:3807ce385b2a 2965 break;
Yajirushi 0:3807ce385b2a 2966 case 250:
Yajirushi 0:3807ce385b2a 2967 val = 3;
Yajirushi 0:3807ce385b2a 2968 break;
Yajirushi 0:3807ce385b2a 2969 case 125:
Yajirushi 0:3807ce385b2a 2970 val = 4;
Yajirushi 0:3807ce385b2a 2971 break;
Yajirushi 0:3807ce385b2a 2972 default:
Yajirushi 0:3807ce385b2a 2973 val = 1;
Yajirushi 0:3807ce385b2a 2974 }
Yajirushi 0:3807ce385b2a 2975
Yajirushi 0:3807ce385b2a 2976 char regVal = ctrl->rr(1, BNO055P1_GYR_CONFIG_0);
Yajirushi 0:3807ce385b2a 2977 regVal = (regVal & 0xF8) + val;
Yajirushi 0:3807ce385b2a 2978
Yajirushi 0:3807ce385b2a 2979 return ctrl->wr(1, BNO055P1_GYR_CONFIG_0, regVal);
Yajirushi 0:3807ce385b2a 2980 }
Yajirushi 0:3807ce385b2a 2981
Yajirushi 0:3807ce385b2a 2982 /* ==================================================================
Yajirushi 0:3807ce385b2a 2983 * 加速度センサーのスリープモードのレジスタ値を取得する
Yajirushi 0:3807ce385b2a 2984 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2985 * returns:
Yajirushi 0:3807ce385b2a 2986 * 加速度センサーのスリープモードのレジスタ値
Yajirushi 0:3807ce385b2a 2987 */
Yajirushi 0:3807ce385b2a 2988 char BOARDC_BNO055::getAccSleepConfig(){
Yajirushi 0:3807ce385b2a 2989 return ctrl->rr(1, BNO055P1_ACC_SLEEP_CONFIG);
Yajirushi 0:3807ce385b2a 2990 }
Yajirushi 0:3807ce385b2a 2991
Yajirushi 0:3807ce385b2a 2992 /* ==================================================================
Yajirushi 0:3807ce385b2a 2993 * 加速度センサーのスリープモードのレジスタ値を設定する
Yajirushi 0:3807ce385b2a 2994 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2995 * 引数regVal: 加速度センサーのスリープモードのレジスタ値
Yajirushi 0:3807ce385b2a 2996 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 2997 * returns:
Yajirushi 0:3807ce385b2a 2998 * -1 失敗
Yajirushi 0:3807ce385b2a 2999 * 1 成功
Yajirushi 0:3807ce385b2a 3000 */
Yajirushi 0:3807ce385b2a 3001 char BOARDC_BNO055::setAccSleepConfig(char regVal){
Yajirushi 0:3807ce385b2a 3002 return ctrl->wr(1, BNO055P1_ACC_SLEEP_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 3003 }
Yajirushi 0:3807ce385b2a 3004
Yajirushi 0:3807ce385b2a 3005 /* ==================================================================
Yajirushi 0:3807ce385b2a 3006 * 加速度センサーのスリープモードのレジスタ値を設定する
Yajirushi 0:3807ce385b2a 3007 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3008 * 引数duration: 加速度センサーのスリープモードの持続閾値
Yajirushi 0:3807ce385b2a 3009 * 引数mode: 加速度センサーのスリープモード選択
Yajirushi 0:3807ce385b2a 3010 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3011 * returns:
Yajirushi 0:3807ce385b2a 3012 * -1 失敗
Yajirushi 0:3807ce385b2a 3013 * 1 成功
Yajirushi 0:3807ce385b2a 3014 */
Yajirushi 0:3807ce385b2a 3015 char BOARDC_BNO055::setAccSleepConfig(char duration, char mode){
Yajirushi 0:3807ce385b2a 3016 char regVal = duration << 1 | mode;
Yajirushi 0:3807ce385b2a 3017 return ctrl->wr(1, BNO055P1_ACC_SLEEP_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 3018 }
Yajirushi 0:3807ce385b2a 3019
Yajirushi 0:3807ce385b2a 3020 /* ==================================================================
Yajirushi 0:3807ce385b2a 3021 * 角速度センサーのスリープモードのレジスタ値を取得する
Yajirushi 0:3807ce385b2a 3022 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3023 * returns:
Yajirushi 0:3807ce385b2a 3024 * 角速度センサーのスリープモードのレジスタ値
Yajirushi 0:3807ce385b2a 3025 */
Yajirushi 0:3807ce385b2a 3026 char BOARDC_BNO055::getGyroSleepConfig(){
Yajirushi 0:3807ce385b2a 3027 return ctrl->rr(1, BNO055P1_GYR_SLEEP_CONFIG);
Yajirushi 0:3807ce385b2a 3028 }
Yajirushi 0:3807ce385b2a 3029
Yajirushi 0:3807ce385b2a 3030 /* ==================================================================
Yajirushi 0:3807ce385b2a 3031 * 角速度センサーのスリープモードのレジスタ値を設定する
Yajirushi 0:3807ce385b2a 3032 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3033 * 引数regVal: 角速度センサーのスリープモードのレジスタ値
Yajirushi 0:3807ce385b2a 3034 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3035 * returns:
Yajirushi 0:3807ce385b2a 3036 * -1 失敗
Yajirushi 0:3807ce385b2a 3037 * 1 成功
Yajirushi 0:3807ce385b2a 3038 */
Yajirushi 0:3807ce385b2a 3039 char BOARDC_BNO055::setGyroSleepConfig(char regVal){
Yajirushi 0:3807ce385b2a 3040 return ctrl->wr(1, BNO055P1_GYR_SLEEP_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 3041 }
Yajirushi 0:3807ce385b2a 3042
Yajirushi 0:3807ce385b2a 3043 /* ==================================================================
Yajirushi 0:3807ce385b2a 3044 * 角速度センサーのスリープモードのレジスタ値を設定する
Yajirushi 0:3807ce385b2a 3045 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3046 * 引数duration: 角速度センサーの自動スリープモードの持続閾値
Yajirushi 0:3807ce385b2a 3047 * 引数mode: 角速度センサーのスリープモードの持続閾値
Yajirushi 0:3807ce385b2a 3048 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3049 * returns:
Yajirushi 0:3807ce385b2a 3050 * -1 失敗
Yajirushi 0:3807ce385b2a 3051 * 1 成功
Yajirushi 0:3807ce385b2a 3052 */
Yajirushi 0:3807ce385b2a 3053 char BOARDC_BNO055::setGyroSleepConfig(char autoSleepDuration, char duration){
Yajirushi 0:3807ce385b2a 3054 char regVal = autoSleepDuration << 3 | duration;
Yajirushi 0:3807ce385b2a 3055 return ctrl->wr(1, BNO055P1_GYR_SLEEP_CONFIG, regVal);
Yajirushi 0:3807ce385b2a 3056 }
Yajirushi 0:3807ce385b2a 3057
Yajirushi 0:3807ce385b2a 3058 /* ==================================================================
Yajirushi 0:3807ce385b2a 3059 * 各センサーの割り込みフラグ発生のINTピン出力許可設定を取得する
Yajirushi 0:3807ce385b2a 3060 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3061 * returns:
Yajirushi 0:3807ce385b2a 3062 * 各センサーの割り込みフラグ有効無効設定のレジスタ値
Yajirushi 0:3807ce385b2a 3063 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3064 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3065 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3066 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3067 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3068 */
Yajirushi 0:3807ce385b2a 3069 char BOARDC_BNO055::getInterruptMask(){
Yajirushi 0:3807ce385b2a 3070 return ctrl->rr(1, BNO055P1_INT_MSK);
Yajirushi 0:3807ce385b2a 3071 }
Yajirushi 0:3807ce385b2a 3072
Yajirushi 0:3807ce385b2a 3073 /* ==================================================================
Yajirushi 0:3807ce385b2a 3074 * 各センサーの割り込みフラグ発生のINTピン出力許可設定を設定する
Yajirushi 0:3807ce385b2a 3075 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3076 * 引数mask: 各センサーの割り込みフラグ有効無効設定のレジスタ値
Yajirushi 0:3807ce385b2a 3077 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3078 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3079 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3080 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3081 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:許可)
Yajirushi 0:3807ce385b2a 3082 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3083 * returns:
Yajirushi 0:3807ce385b2a 3084 * -1 失敗
Yajirushi 0:3807ce385b2a 3085 * 1 成功
Yajirushi 0:3807ce385b2a 3086 */
Yajirushi 0:3807ce385b2a 3087 char BOARDC_BNO055::setInterruptMask(char mask){
Yajirushi 0:3807ce385b2a 3088 return ctrl->wr(1, BNO055P1_INT_MSK, mask);
Yajirushi 0:3807ce385b2a 3089 }
Yajirushi 0:3807ce385b2a 3090
Yajirushi 0:3807ce385b2a 3091 /* ==================================================================
Yajirushi 0:3807ce385b2a 3092 * 各センサーの割り込みフラグ有効無効設定を取得する
Yajirushi 0:3807ce385b2a 3093 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3094 * returns:
Yajirushi 0:3807ce385b2a 3095 * 各センサーの割り込みフラグ有効無効設定のレジスタ値
Yajirushi 0:3807ce385b2a 3096 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3097 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3098 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3099 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3100 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3101 */
Yajirushi 0:3807ce385b2a 3102 char BOARDC_BNO055::getInterruptEnable(){
Yajirushi 0:3807ce385b2a 3103 return ctrl->rr(1, BNO055P1_INT_EN);
Yajirushi 0:3807ce385b2a 3104 }
Yajirushi 0:3807ce385b2a 3105
Yajirushi 0:3807ce385b2a 3106 /* ==================================================================
Yajirushi 0:3807ce385b2a 3107 * 各センサーの割り込みフラグ有効無効設定を設定する
Yajirushi 0:3807ce385b2a 3108 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3109 * 引数mask: 各センサーの割り込みフラグ有効無効設定のレジスタ値
Yajirushi 0:3807ce385b2a 3110 * 2bit目 角速度センサーAnyMotion割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3111 * 3bit目 角速度センサーHighRate割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3112 * 5bit目 加速度センサーHIGH_G割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3113 * 6bit目 加速度センサーAnyMotion割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3114 * 7bit目 加速度センサーNoMotion(SloMo)割り込み(0:無効, 1:有効)
Yajirushi 0:3807ce385b2a 3115 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3116 * returns:
Yajirushi 0:3807ce385b2a 3117 * -1 失敗
Yajirushi 0:3807ce385b2a 3118 * 1 成功
Yajirushi 0:3807ce385b2a 3119 */
Yajirushi 0:3807ce385b2a 3120 char BOARDC_BNO055::setInterruptEnable(char mask){
Yajirushi 0:3807ce385b2a 3121 return ctrl->wr(1, BNO055P1_INT_EN, mask);
Yajirushi 0:3807ce385b2a 3122 }
Yajirushi 0:3807ce385b2a 3123
Yajirushi 0:3807ce385b2a 3124 /* ==================================================================
Yajirushi 0:3807ce385b2a 3125 * 加速度センサーのAnyMotion割り込み発生閾値を取得する
Yajirushi 0:3807ce385b2a 3126 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3127 * 引数ismg: 出力する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3128 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3129 * returns:
Yajirushi 0:3807ce385b2a 3130 * 加速度センサーのAnyMotion割り込み発生閾値
Yajirushi 0:3807ce385b2a 3131 */
Yajirushi 0:3807ce385b2a 3132 float BOARDC_BNO055::getAccAnyMotionThreashold(bool ismg){
Yajirushi 0:3807ce385b2a 3133 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3134 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3135
Yajirushi 0:3807ce385b2a 3136 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3137 case 0:
Yajirushi 0:3807ce385b2a 3138 scale = 3.91;
Yajirushi 0:3807ce385b2a 3139 break;
Yajirushi 0:3807ce385b2a 3140 case 1:
Yajirushi 0:3807ce385b2a 3141 scale = 7.81;
Yajirushi 0:3807ce385b2a 3142 break;
Yajirushi 0:3807ce385b2a 3143 case 2:
Yajirushi 0:3807ce385b2a 3144 scale = 15.63;
Yajirushi 0:3807ce385b2a 3145 break;
Yajirushi 0:3807ce385b2a 3146 case 3:
Yajirushi 0:3807ce385b2a 3147 scale = 31.25;
Yajirushi 0:3807ce385b2a 3148 break;
Yajirushi 0:3807ce385b2a 3149 }
Yajirushi 0:3807ce385b2a 3150
Yajirushi 0:3807ce385b2a 3151 scale *= (ismg) ? 1.0 : 9.80665;
Yajirushi 0:3807ce385b2a 3152
Yajirushi 0:3807ce385b2a 3153 return (1.0 * ctrl->rr(1, BNO055P1_ACC_AM_THRES)) * scale;
Yajirushi 0:3807ce385b2a 3154 }
Yajirushi 0:3807ce385b2a 3155
Yajirushi 0:3807ce385b2a 3156 /* ==================================================================
Yajirushi 0:3807ce385b2a 3157 * 加速度センサーのAnyMotion割り込み発生閾値を設定する
Yajirushi 0:3807ce385b2a 3158 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3159 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3160 * 引数threashold: 単位変換済みの閾値
Yajirushi 0:3807ce385b2a 3161 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3162 * returns:
Yajirushi 0:3807ce385b2a 3163 * -1 失敗
Yajirushi 0:3807ce385b2a 3164 * 1 成功
Yajirushi 0:3807ce385b2a 3165 */
Yajirushi 0:3807ce385b2a 3166 char BOARDC_BNO055::setAccAnyMotionThreashold(bool ismg, float threashold){
Yajirushi 0:3807ce385b2a 3167 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3168 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3169
Yajirushi 0:3807ce385b2a 3170 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3171 case 0:
Yajirushi 0:3807ce385b2a 3172 scale = 3.91;
Yajirushi 0:3807ce385b2a 3173 break;
Yajirushi 0:3807ce385b2a 3174 case 1:
Yajirushi 0:3807ce385b2a 3175 scale = 7.81;
Yajirushi 0:3807ce385b2a 3176 break;
Yajirushi 0:3807ce385b2a 3177 case 2:
Yajirushi 0:3807ce385b2a 3178 scale = 15.63;
Yajirushi 0:3807ce385b2a 3179 break;
Yajirushi 0:3807ce385b2a 3180 case 3:
Yajirushi 0:3807ce385b2a 3181 scale = 31.25;
Yajirushi 0:3807ce385b2a 3182 break;
Yajirushi 0:3807ce385b2a 3183 }
Yajirushi 0:3807ce385b2a 3184
Yajirushi 0:3807ce385b2a 3185 scale *= (ismg) ? 1.0 : 9.8;
Yajirushi 0:3807ce385b2a 3186
Yajirushi 0:3807ce385b2a 3187 char cTh = (char)((threashold / scale) + 0.5);
Yajirushi 0:3807ce385b2a 3188
Yajirushi 0:3807ce385b2a 3189 return ctrl->wr(1, BNO055P1_ACC_AM_THRES, cTh);
Yajirushi 0:3807ce385b2a 3190 }
Yajirushi 0:3807ce385b2a 3191
Yajirushi 0:3807ce385b2a 3192 /* ==================================================================
Yajirushi 0:3807ce385b2a 3193 * 加速度センサーの割り込み使用設定を取得する
Yajirushi 0:3807ce385b2a 3194 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3195 * returns:
Yajirushi 0:3807ce385b2a 3196 * 0bit目,1bit目 連続発生閾値([1bit目+0bit目+1]回の発生でフラグON)
Yajirushi 0:3807ce385b2a 3197 * 2bit目 AM/NM_X_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3198 * 3bit目 AM/NM_Y_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3199 * 4bit目 AM/NM_Z_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3200 * 5bit目 HG_X_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3201 * 6bit目 HG_Y_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3202 * 7bit目 HG_Z_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3203 */
Yajirushi 0:3807ce385b2a 3204 char BOARDC_BNO055::getAccInterruptSettings(){
Yajirushi 0:3807ce385b2a 3205 return ctrl->rr(1, BNO055P1_ACC_INT_SETTINGS);
Yajirushi 0:3807ce385b2a 3206 }
Yajirushi 0:3807ce385b2a 3207
Yajirushi 0:3807ce385b2a 3208 /* ==================================================================
Yajirushi 0:3807ce385b2a 3209 * 加速度センサーの割り込み使用設定を設定する
Yajirushi 0:3807ce385b2a 3210 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3211 * 引数settings:
Yajirushi 0:3807ce385b2a 3212 * 0bit目,1bit目 連続発生閾値([1bit目+0bit目+1]回の発生でフラグON)
Yajirushi 0:3807ce385b2a 3213 * 2bit目 AM/NM_X_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3214 * 3bit目 AM/NM_Y_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3215 * 4bit目 AM/NM_Z_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3216 * 5bit目 HG_X_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3217 * 6bit目 HG_Y_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3218 * 7bit目 HG_Z_AXISトリガー使用(0:使用しない, 1:使用する)
Yajirushi 0:3807ce385b2a 3219 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3220 * returns:
Yajirushi 0:3807ce385b2a 3221 * -1 失敗
Yajirushi 0:3807ce385b2a 3222 * 1 成功
Yajirushi 0:3807ce385b2a 3223 */
Yajirushi 0:3807ce385b2a 3224 char BOARDC_BNO055::setAccInterruptSettings(char settings){
Yajirushi 0:3807ce385b2a 3225 return ctrl->wr(1, BNO055P1_ACC_INT_SETTINGS, settings);
Yajirushi 0:3807ce385b2a 3226 }
Yajirushi 0:3807ce385b2a 3227
Yajirushi 0:3807ce385b2a 3228 /* ==================================================================
Yajirushi 0:3807ce385b2a 3229 * 加速度センサーのHighG割り込み閾値を取得する
Yajirushi 0:3807ce385b2a 3230 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3231 * returns:
Yajirushi 0:3807ce385b2a 3232 * HighG割り込み発生閾値[単位:ミリ秒](2ms - 512ms)
Yajirushi 0:3807ce385b2a 3233 */
Yajirushi 0:3807ce385b2a 3234 unsigned short BOARDC_BNO055::getAccHighGduration(){
Yajirushi 0:3807ce385b2a 3235 return (ctrl->rr(1, BNO055P1_ACC_HG_DURATION) + 1) << 1;
Yajirushi 0:3807ce385b2a 3236 }
Yajirushi 0:3807ce385b2a 3237
Yajirushi 0:3807ce385b2a 3238 /* ==================================================================
Yajirushi 0:3807ce385b2a 3239 * 加速度センサーのHighG割り込み継続発生閾値を設定する
Yajirushi 0:3807ce385b2a 3240 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3241 * 引数ms: HighG割り込み継続発生閾値[単位:ミリ秒](2ms - 512ms)
Yajirushi 0:3807ce385b2a 3242 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3243 * returns:
Yajirushi 0:3807ce385b2a 3244 * -1 失敗
Yajirushi 0:3807ce385b2a 3245 * 1 成功
Yajirushi 0:3807ce385b2a 3246 */
Yajirushi 0:3807ce385b2a 3247 char BOARDC_BNO055::setAccHighGduration(short ms){
Yajirushi 0:3807ce385b2a 3248 if(ms > 512 || ms < 2) return -1;
Yajirushi 0:3807ce385b2a 3249
Yajirushi 0:3807ce385b2a 3250 ms = (ms >> 1) - 1;
Yajirushi 0:3807ce385b2a 3251
Yajirushi 0:3807ce385b2a 3252 return ctrl->wr(1, BNO055P1_ACC_HG_DURATION, ms & 0xFF);
Yajirushi 0:3807ce385b2a 3253 }
Yajirushi 0:3807ce385b2a 3254
Yajirushi 0:3807ce385b2a 3255 /* ==================================================================
Yajirushi 0:3807ce385b2a 3256 * 加速度センサーのHighG割り込み発生閾値を取得する
Yajirushi 0:3807ce385b2a 3257 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3258 * 引数ismg: 出力する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3259 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3260 * returns:
Yajirushi 0:3807ce385b2a 3261 * HighG割り込み発生閾値
Yajirushi 0:3807ce385b2a 3262 */
Yajirushi 0:3807ce385b2a 3263 float BOARDC_BNO055::getAccHighGThreashold(bool ismg){
Yajirushi 0:3807ce385b2a 3264 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3265 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3266
Yajirushi 0:3807ce385b2a 3267 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3268 case 0:
Yajirushi 0:3807ce385b2a 3269 scale = 7.81;
Yajirushi 0:3807ce385b2a 3270 break;
Yajirushi 0:3807ce385b2a 3271 case 1:
Yajirushi 0:3807ce385b2a 3272 scale = 15.63;
Yajirushi 0:3807ce385b2a 3273 break;
Yajirushi 0:3807ce385b2a 3274 case 2:
Yajirushi 0:3807ce385b2a 3275 scale = 31.25;
Yajirushi 0:3807ce385b2a 3276 break;
Yajirushi 0:3807ce385b2a 3277 case 3:
Yajirushi 0:3807ce385b2a 3278 scale = 62.5;
Yajirushi 0:3807ce385b2a 3279 break;
Yajirushi 0:3807ce385b2a 3280 }
Yajirushi 0:3807ce385b2a 3281
Yajirushi 0:3807ce385b2a 3282 scale *= (ismg) ? 1.0 : 9.8;
Yajirushi 0:3807ce385b2a 3283
Yajirushi 0:3807ce385b2a 3284 return (1.0 * ctrl->rr(1, BNO055P1_ACC_HG_THRES)) * scale;
Yajirushi 0:3807ce385b2a 3285 }
Yajirushi 0:3807ce385b2a 3286
Yajirushi 0:3807ce385b2a 3287 /* ==================================================================
Yajirushi 0:3807ce385b2a 3288 * 加速度センサーのHighG割り込み発生閾値を設定する
Yajirushi 0:3807ce385b2a 3289 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3290 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3291 * 引数threashold: 単位変換済みの閾値
Yajirushi 0:3807ce385b2a 3292 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3293 * returns:
Yajirushi 0:3807ce385b2a 3294 * -1 失敗
Yajirushi 0:3807ce385b2a 3295 * 1 成功
Yajirushi 0:3807ce385b2a 3296 */
Yajirushi 0:3807ce385b2a 3297 char BOARDC_BNO055::setAccHighGThreashold(bool ismg, float threashold){
Yajirushi 0:3807ce385b2a 3298 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3299 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3300
Yajirushi 0:3807ce385b2a 3301 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3302 case 0:
Yajirushi 0:3807ce385b2a 3303 scale = 7.81;
Yajirushi 0:3807ce385b2a 3304 break;
Yajirushi 0:3807ce385b2a 3305 case 1:
Yajirushi 0:3807ce385b2a 3306 scale = 15.63;
Yajirushi 0:3807ce385b2a 3307 break;
Yajirushi 0:3807ce385b2a 3308 case 2:
Yajirushi 0:3807ce385b2a 3309 scale = 31.25;
Yajirushi 0:3807ce385b2a 3310 break;
Yajirushi 0:3807ce385b2a 3311 case 3:
Yajirushi 0:3807ce385b2a 3312 scale = 62.5;
Yajirushi 0:3807ce385b2a 3313 break;
Yajirushi 0:3807ce385b2a 3314 }
Yajirushi 0:3807ce385b2a 3315
Yajirushi 0:3807ce385b2a 3316 scale *= (ismg) ? 1.0 : 9.8;
Yajirushi 0:3807ce385b2a 3317
Yajirushi 0:3807ce385b2a 3318 char cTh = (char)((threashold / scale) + 0.5);
Yajirushi 0:3807ce385b2a 3319
Yajirushi 0:3807ce385b2a 3320 return ctrl->wr(1, BNO055P1_ACC_HG_THRES, cTh);
Yajirushi 0:3807ce385b2a 3321 }
Yajirushi 0:3807ce385b2a 3322
Yajirushi 0:3807ce385b2a 3323 /* ==================================================================
Yajirushi 0:3807ce385b2a 3324 * 加速度センサーのNoMotion割り込み発生閾値を取得する
Yajirushi 0:3807ce385b2a 3325 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3326 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3327 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3328 * returns:
Yajirushi 0:3807ce385b2a 3329 * NoMotion割り込み発生閾値
Yajirushi 0:3807ce385b2a 3330 */
Yajirushi 0:3807ce385b2a 3331 float BOARDC_BNO055::getAccNMThreashold(bool ismg){
Yajirushi 0:3807ce385b2a 3332 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3333 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3334
Yajirushi 0:3807ce385b2a 3335 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3336 case 0:
Yajirushi 0:3807ce385b2a 3337 scale = 3.91;
Yajirushi 0:3807ce385b2a 3338 break;
Yajirushi 0:3807ce385b2a 3339 case 1:
Yajirushi 0:3807ce385b2a 3340 scale = 7.81;
Yajirushi 0:3807ce385b2a 3341 break;
Yajirushi 0:3807ce385b2a 3342 case 2:
Yajirushi 0:3807ce385b2a 3343 scale = 15.63;
Yajirushi 0:3807ce385b2a 3344 break;
Yajirushi 0:3807ce385b2a 3345 case 3:
Yajirushi 0:3807ce385b2a 3346 scale = 31.25;
Yajirushi 0:3807ce385b2a 3347 break;
Yajirushi 0:3807ce385b2a 3348 }
Yajirushi 0:3807ce385b2a 3349
Yajirushi 0:3807ce385b2a 3350 scale *= (ismg) ? 1.0 : 9.8;
Yajirushi 0:3807ce385b2a 3351
Yajirushi 0:3807ce385b2a 3352 return (1.0 * ctrl->rr(1, BNO055P1_ACC_NM_THRES)) * scale;
Yajirushi 0:3807ce385b2a 3353 }
Yajirushi 0:3807ce385b2a 3354
Yajirushi 0:3807ce385b2a 3355 /* ==================================================================
Yajirushi 0:3807ce385b2a 3356 * 加速度センサーのNoMotion割り込み発生閾値を設定する
Yajirushi 0:3807ce385b2a 3357 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3358 * 引数ismg: 設定する値の単位の選択(true: mG, false: mm/s^2)
Yajirushi 0:3807ce385b2a 3359 * 引数threashold: 単位変換済みの閾値
Yajirushi 0:3807ce385b2a 3360 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3361 * returns:
Yajirushi 0:3807ce385b2a 3362 * -1 失敗
Yajirushi 0:3807ce385b2a 3363 * 1 成功
Yajirushi 0:3807ce385b2a 3364 */
Yajirushi 0:3807ce385b2a 3365 char BOARDC_BNO055::setAccNMThreashold(bool ismg, float threashold){
Yajirushi 0:3807ce385b2a 3366 char rc = getAccConfig();
Yajirushi 0:3807ce385b2a 3367 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3368
Yajirushi 0:3807ce385b2a 3369 switch(rc & 0x03){
Yajirushi 0:3807ce385b2a 3370 case 0:
Yajirushi 0:3807ce385b2a 3371 scale = 3.91;
Yajirushi 0:3807ce385b2a 3372 break;
Yajirushi 0:3807ce385b2a 3373 case 1:
Yajirushi 0:3807ce385b2a 3374 scale = 7.81;
Yajirushi 0:3807ce385b2a 3375 break;
Yajirushi 0:3807ce385b2a 3376 case 2:
Yajirushi 0:3807ce385b2a 3377 scale = 15.63;
Yajirushi 0:3807ce385b2a 3378 break;
Yajirushi 0:3807ce385b2a 3379 case 3:
Yajirushi 0:3807ce385b2a 3380 scale = 31.25;
Yajirushi 0:3807ce385b2a 3381 break;
Yajirushi 0:3807ce385b2a 3382 }
Yajirushi 0:3807ce385b2a 3383
Yajirushi 0:3807ce385b2a 3384 scale *= (ismg) ? 1.0 : 9.8;
Yajirushi 0:3807ce385b2a 3385
Yajirushi 0:3807ce385b2a 3386 char cTh = (char)((threashold / scale) + 0.5);
Yajirushi 0:3807ce385b2a 3387
Yajirushi 0:3807ce385b2a 3388 return ctrl->wr(1, BNO055P1_ACC_NM_THRES, cTh);
Yajirushi 0:3807ce385b2a 3389 }
Yajirushi 0:3807ce385b2a 3390
Yajirushi 0:3807ce385b2a 3391 /* ==================================================================
Yajirushi 0:3807ce385b2a 3392 * 加速度センサーのNoMotion割り込み設定を取得する
Yajirushi 0:3807ce385b2a 3393 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3394 * returns:
Yajirushi 0:3807ce385b2a 3395 * NoMotion割り込み設定値
Yajirushi 0:3807ce385b2a 3396 * 1bit目: スローモーション、ノーモーション選択(0:NoMotion, 1:SlowMotion)
Yajirushi 0:3807ce385b2a 3397 * 2 - 7bit目: slo_no_mot _dur設定値(データシート参照)
Yajirushi 0:3807ce385b2a 3398 */
Yajirushi 0:3807ce385b2a 3399 char BOARDC_BNO055::getAccNMsetting(){
Yajirushi 0:3807ce385b2a 3400 return ctrl->rr(1, BNO055P1_ACC_NM_SET);
Yajirushi 0:3807ce385b2a 3401 }
Yajirushi 0:3807ce385b2a 3402
Yajirushi 0:3807ce385b2a 3403 /* ==================================================================
Yajirushi 0:3807ce385b2a 3404 * 加速度センサーのNoMotion割り込み設定を設定する
Yajirushi 0:3807ce385b2a 3405 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3406 * 引数setting: NoMotion割り込み設定値
Yajirushi 0:3807ce385b2a 3407 * 1bit目: スローモーション、ノーモーション選択(0:NoMotion, 1:SlowMotion)
Yajirushi 0:3807ce385b2a 3408 * 2 - 7bit目: slo_no_mot _dur設定値(データシート参照)
Yajirushi 0:3807ce385b2a 3409 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3410 * returns:
Yajirushi 0:3807ce385b2a 3411 * -1 失敗
Yajirushi 0:3807ce385b2a 3412 * 1 成功
Yajirushi 0:3807ce385b2a 3413 */
Yajirushi 0:3807ce385b2a 3414 char BOARDC_BNO055::setAccNMsetting(char setting){
Yajirushi 0:3807ce385b2a 3415 return ctrl->wr(1, BNO055P1_ACC_NM_SET, setting);
Yajirushi 0:3807ce385b2a 3416 }
Yajirushi 0:3807ce385b2a 3417
Yajirushi 0:3807ce385b2a 3418 /* ==================================================================
Yajirushi 0:3807ce385b2a 3419 * 角速度センサーの割り込み設定を取得する
Yajirushi 0:3807ce385b2a 3420 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3421 * returns:
Yajirushi 0:3807ce385b2a 3422 * 角速度センサーの割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3423 */
Yajirushi 0:3807ce385b2a 3424 char BOARDC_BNO055::getGyroInterruptSettings(){
Yajirushi 0:3807ce385b2a 3425 return ctrl->rr(1, BNO055P1_GYR_INT_SETING);
Yajirushi 0:3807ce385b2a 3426 }
Yajirushi 0:3807ce385b2a 3427
Yajirushi 0:3807ce385b2a 3428 /* ==================================================================
Yajirushi 0:3807ce385b2a 3429 * 角速度センサーの割り込み設定を設定する
Yajirushi 0:3807ce385b2a 3430 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3431 * 引数setting: 角速度センサーの割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3432 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3433 * returns:
Yajirushi 0:3807ce385b2a 3434 * -1 失敗
Yajirushi 0:3807ce385b2a 3435 * 1 成功
Yajirushi 0:3807ce385b2a 3436 */
Yajirushi 0:3807ce385b2a 3437 char BOARDC_BNO055::setGyroInterruptSettings(char settings){
Yajirushi 0:3807ce385b2a 3438 return ctrl->wr(1, BNO055P1_GYR_INT_SETING, settings);
Yajirushi 0:3807ce385b2a 3439 }
Yajirushi 0:3807ce385b2a 3440
Yajirushi 0:3807ce385b2a 3441 /* ==================================================================
Yajirushi 0:3807ce385b2a 3442 * 角速度センサーのHighRate割り込み設定(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3443 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3444 * 引数setting: 角速度センサーの割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3445 */
Yajirushi 0:3807ce385b2a 3446 char BOARDC_BNO055::getGyroHighRateXsetting(){
Yajirushi 0:3807ce385b2a 3447 return ctrl->rr(1, BNO055P1_GYR_HR_X_SET);
Yajirushi 0:3807ce385b2a 3448 }
Yajirushi 0:3807ce385b2a 3449
Yajirushi 0:3807ce385b2a 3450 /* ==================================================================
Yajirushi 0:3807ce385b2a 3451 * 角速度センサーのHighRate割り込み設定(X軸のみ、実際の値)を取得する
Yajirushi 0:3807ce385b2a 3452 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3453 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
Yajirushi 0:3807ce385b2a 3454 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
Yajirushi 0:3807ce385b2a 3455 */
Yajirushi 0:3807ce385b2a 3456 void BOARDC_BNO055::getGyroHighRateXsetting_dps(float &hyst, float &thres){
Yajirushi 0:3807ce385b2a 3457 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3458 hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3459 thres = 0.0f;
Yajirushi 0:3807ce385b2a 3460
Yajirushi 0:3807ce385b2a 3461 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3462 case 0:
Yajirushi 0:3807ce385b2a 3463 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3464 thres = 62.5;
Yajirushi 0:3807ce385b2a 3465 break;
Yajirushi 0:3807ce385b2a 3466 case 1:
Yajirushi 0:3807ce385b2a 3467 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3468 thres = 31.25;
Yajirushi 0:3807ce385b2a 3469 break;
Yajirushi 0:3807ce385b2a 3470 case 2:
Yajirushi 0:3807ce385b2a 3471 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3472 thres = 15.62;
Yajirushi 0:3807ce385b2a 3473 break;
Yajirushi 0:3807ce385b2a 3474 case 3:
Yajirushi 0:3807ce385b2a 3475 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3476 thres = 7.81;
Yajirushi 0:3807ce385b2a 3477 break;
Yajirushi 0:3807ce385b2a 3478 case 4:
Yajirushi 0:3807ce385b2a 3479 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3480 thres = 3.90;
Yajirushi 0:3807ce385b2a 3481 break;
Yajirushi 0:3807ce385b2a 3482 }
Yajirushi 0:3807ce385b2a 3483
Yajirushi 0:3807ce385b2a 3484 char val = ctrl->rr(1, BNO055P1_GYR_HR_X_SET);
Yajirushi 0:3807ce385b2a 3485
Yajirushi 0:3807ce385b2a 3486 hyst *= (float)((val & 0x60) * 1.0);
Yajirushi 0:3807ce385b2a 3487 thres *= (float)((val & 0x1F) * 1.0);
Yajirushi 0:3807ce385b2a 3488 }
Yajirushi 0:3807ce385b2a 3489
Yajirushi 0:3807ce385b2a 3490 /* ==================================================================
Yajirushi 0:3807ce385b2a 3491 * 角速度センサーのHighRate割り込み設定(X軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3492 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3493 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3494 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3495 * returns:
Yajirushi 0:3807ce385b2a 3496 * -1 失敗
Yajirushi 0:3807ce385b2a 3497 * 1 成功
Yajirushi 0:3807ce385b2a 3498 */
Yajirushi 0:3807ce385b2a 3499 char BOARDC_BNO055::setGyroHighRateXsetting(char setting){
Yajirushi 0:3807ce385b2a 3500 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, setting);
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 * 引数hystVal: ヒステリシス
Yajirushi 0:3807ce385b2a 3507 * 引数thresVal: スレッショルド
Yajirushi 0:3807ce385b2a 3508 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3509 * returns:
Yajirushi 0:3807ce385b2a 3510 * -1 失敗
Yajirushi 0:3807ce385b2a 3511 * 1 成功
Yajirushi 0:3807ce385b2a 3512 */
Yajirushi 0:3807ce385b2a 3513 char BOARDC_BNO055::setGyroHighRateXsetting_dps(float hystVal, float thresVal){
Yajirushi 0:3807ce385b2a 3514 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3515 float hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3516 float thres = 0.0f;
Yajirushi 0:3807ce385b2a 3517
Yajirushi 0:3807ce385b2a 3518 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3519 case 0:
Yajirushi 0:3807ce385b2a 3520 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3521 thres = 62.5;
Yajirushi 0:3807ce385b2a 3522 break;
Yajirushi 0:3807ce385b2a 3523 case 1:
Yajirushi 0:3807ce385b2a 3524 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3525 thres = 31.25;
Yajirushi 0:3807ce385b2a 3526 break;
Yajirushi 0:3807ce385b2a 3527 case 2:
Yajirushi 0:3807ce385b2a 3528 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3529 thres = 15.62;
Yajirushi 0:3807ce385b2a 3530 break;
Yajirushi 0:3807ce385b2a 3531 case 3:
Yajirushi 0:3807ce385b2a 3532 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3533 thres = 7.81;
Yajirushi 0:3807ce385b2a 3534 break;
Yajirushi 0:3807ce385b2a 3535 case 4:
Yajirushi 0:3807ce385b2a 3536 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3537 thres = 3.90;
Yajirushi 0:3807ce385b2a 3538 break;
Yajirushi 0:3807ce385b2a 3539 }
Yajirushi 0:3807ce385b2a 3540
Yajirushi 0:3807ce385b2a 3541 char hystChar = (char)((hystVal / hyst) + 0.5);
Yajirushi 0:3807ce385b2a 3542 char thresChar = (char)((thresVal / thres) + 0.5);
Yajirushi 0:3807ce385b2a 3543
Yajirushi 0:3807ce385b2a 3544 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, ((hystChar << 5) | thresChar));
Yajirushi 0:3807ce385b2a 3545 }
Yajirushi 0:3807ce385b2a 3546
Yajirushi 0:3807ce385b2a 3547 /* ==================================================================
Yajirushi 0:3807ce385b2a 3548 * 角速度センサーのHighRate割り込み継続発生閾値(X軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3549 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3550 * returns:
Yajirushi 0:3807ce385b2a 3551 * HighRate割り込み継続発生閾値[単位:ミリ秒]
Yajirushi 0:3807ce385b2a 3552 */
Yajirushi 0:3807ce385b2a 3553 float BOARDC_BNO055::getGyroHighRateXduration(){
Yajirushi 0:3807ce385b2a 3554 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_X)) * 2.5;
Yajirushi 0:3807ce385b2a 3555 }
Yajirushi 0:3807ce385b2a 3556
Yajirushi 0:3807ce385b2a 3557 /* ==================================================================
Yajirushi 0:3807ce385b2a 3558 * 角速度センサーのHighRate割り込み継続発生閾値(X軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3559 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3560 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
Yajirushi 0:3807ce385b2a 3561 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3562 * returns:
Yajirushi 0:3807ce385b2a 3563 * -1 失敗
Yajirushi 0:3807ce385b2a 3564 * 1 成功
Yajirushi 0:3807ce385b2a 3565 */
Yajirushi 0:3807ce385b2a 3566 char BOARDC_BNO055::setGyroHighRateXduration(float duration){
Yajirushi 0:3807ce385b2a 3567 return ctrl->wr(1, BNO055P1_GYR_HR_X_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
Yajirushi 0:3807ce385b2a 3568 }
Yajirushi 0:3807ce385b2a 3569
Yajirushi 0:3807ce385b2a 3570 /* ==================================================================
Yajirushi 0:3807ce385b2a 3571 * 角速度センサーのHighRate割り込み設定(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3572 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3573 * returns:
Yajirushi 0:3807ce385b2a 3574 * 角速度センサーのHighRate割り込み設定
Yajirushi 0:3807ce385b2a 3575 */
Yajirushi 0:3807ce385b2a 3576 char BOARDC_BNO055::getGyroHighRateYsetting(){
Yajirushi 0:3807ce385b2a 3577 return ctrl->rr(1, BNO055P1_GYR_HR_Y_SET);
Yajirushi 0:3807ce385b2a 3578 }
Yajirushi 0:3807ce385b2a 3579
Yajirushi 0:3807ce385b2a 3580 /* ==================================================================
Yajirushi 0:3807ce385b2a 3581 * 角速度センサーのHighRate割り込み設定(Y軸のみ、実際の値)を取得する
Yajirushi 0:3807ce385b2a 3582 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3583 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
Yajirushi 0:3807ce385b2a 3584 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
Yajirushi 0:3807ce385b2a 3585 */
Yajirushi 0:3807ce385b2a 3586 void BOARDC_BNO055::getGyroHighRateYsetting_dps(float &hyst, float &thres){
Yajirushi 0:3807ce385b2a 3587 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3588 hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3589 thres = 0.0f;
Yajirushi 0:3807ce385b2a 3590
Yajirushi 0:3807ce385b2a 3591 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3592 case 0:
Yajirushi 0:3807ce385b2a 3593 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3594 thres = 62.5;
Yajirushi 0:3807ce385b2a 3595 break;
Yajirushi 0:3807ce385b2a 3596 case 1:
Yajirushi 0:3807ce385b2a 3597 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3598 thres = 31.25;
Yajirushi 0:3807ce385b2a 3599 break;
Yajirushi 0:3807ce385b2a 3600 case 2:
Yajirushi 0:3807ce385b2a 3601 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3602 thres = 15.62;
Yajirushi 0:3807ce385b2a 3603 break;
Yajirushi 0:3807ce385b2a 3604 case 3:
Yajirushi 0:3807ce385b2a 3605 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3606 thres = 7.81;
Yajirushi 0:3807ce385b2a 3607 break;
Yajirushi 0:3807ce385b2a 3608 case 4:
Yajirushi 0:3807ce385b2a 3609 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3610 thres = 3.90;
Yajirushi 0:3807ce385b2a 3611 break;
Yajirushi 0:3807ce385b2a 3612 }
Yajirushi 0:3807ce385b2a 3613
Yajirushi 0:3807ce385b2a 3614 char val = ctrl->rr(1, BNO055P1_GYR_HR_Y_SET);
Yajirushi 0:3807ce385b2a 3615
Yajirushi 0:3807ce385b2a 3616 hyst *= (float)((val & 0x60) * 1.0);
Yajirushi 0:3807ce385b2a 3617 thres *= (float)((val & 0x1F) * 1.0);
Yajirushi 0:3807ce385b2a 3618 }
Yajirushi 0:3807ce385b2a 3619
Yajirushi 0:3807ce385b2a 3620 /* ==================================================================
Yajirushi 0:3807ce385b2a 3621 * 角速度センサーのHighRate割り込み設定(Y軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3622 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3623 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3624 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3625 * returns:
Yajirushi 0:3807ce385b2a 3626 * -1 失敗
Yajirushi 0:3807ce385b2a 3627 * 1 成功
Yajirushi 0:3807ce385b2a 3628 */
Yajirushi 0:3807ce385b2a 3629 char BOARDC_BNO055::setGyroHighRateYsetting(char setting){
Yajirushi 0:3807ce385b2a 3630 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, setting);
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 * 引数hystVal: ヒステリシス
Yajirushi 0:3807ce385b2a 3637 * 引数thresVal: スレッショルド
Yajirushi 0:3807ce385b2a 3638 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3639 * returns:
Yajirushi 0:3807ce385b2a 3640 * -1 失敗
Yajirushi 0:3807ce385b2a 3641 * 1 成功
Yajirushi 0:3807ce385b2a 3642 */
Yajirushi 0:3807ce385b2a 3643 char BOARDC_BNO055::setGyroHighRateYsetting_dps(float hystVal, float thresVal){
Yajirushi 0:3807ce385b2a 3644 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3645 float hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3646 float thres = 0.0f;
Yajirushi 0:3807ce385b2a 3647
Yajirushi 0:3807ce385b2a 3648 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3649 case 0:
Yajirushi 0:3807ce385b2a 3650 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3651 thres = 62.5;
Yajirushi 0:3807ce385b2a 3652 break;
Yajirushi 0:3807ce385b2a 3653 case 1:
Yajirushi 0:3807ce385b2a 3654 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3655 thres = 31.25;
Yajirushi 0:3807ce385b2a 3656 break;
Yajirushi 0:3807ce385b2a 3657 case 2:
Yajirushi 0:3807ce385b2a 3658 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3659 thres = 15.62;
Yajirushi 0:3807ce385b2a 3660 break;
Yajirushi 0:3807ce385b2a 3661 case 3:
Yajirushi 0:3807ce385b2a 3662 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3663 thres = 7.81;
Yajirushi 0:3807ce385b2a 3664 break;
Yajirushi 0:3807ce385b2a 3665 case 4:
Yajirushi 0:3807ce385b2a 3666 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3667 thres = 3.90;
Yajirushi 0:3807ce385b2a 3668 break;
Yajirushi 0:3807ce385b2a 3669 }
Yajirushi 0:3807ce385b2a 3670
Yajirushi 0:3807ce385b2a 3671 char hystChar = (char)((hystVal / hyst) + 0.5);
Yajirushi 0:3807ce385b2a 3672 char thresChar = (char)((thresVal / thres) + 0.5);
Yajirushi 0:3807ce385b2a 3673
Yajirushi 0:3807ce385b2a 3674 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, ((hystChar << 5) | thresChar));
Yajirushi 0:3807ce385b2a 3675 }
Yajirushi 0:3807ce385b2a 3676
Yajirushi 0:3807ce385b2a 3677 /* ==================================================================
Yajirushi 0:3807ce385b2a 3678 * 角速度センサーのHighRate割り込み継続発生閾値(Y軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3679 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3680 * returns:
Yajirushi 0:3807ce385b2a 3681 * HighRate割り込み継続発生閾値[単位:ミリ秒]
Yajirushi 0:3807ce385b2a 3682 */
Yajirushi 0:3807ce385b2a 3683 float BOARDC_BNO055::getGyroHighRateYduration(){
Yajirushi 0:3807ce385b2a 3684 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_Y)) * 2.5;
Yajirushi 0:3807ce385b2a 3685 }
Yajirushi 0:3807ce385b2a 3686
Yajirushi 0:3807ce385b2a 3687 /* ==================================================================
Yajirushi 0:3807ce385b2a 3688 * 角速度センサーのHighRate割り込み継続発生閾値(Y軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3689 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3690 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
Yajirushi 0:3807ce385b2a 3691 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3692 * returns:
Yajirushi 0:3807ce385b2a 3693 * -1 失敗
Yajirushi 0:3807ce385b2a 3694 * 1 成功
Yajirushi 0:3807ce385b2a 3695 */
Yajirushi 0:3807ce385b2a 3696 char BOARDC_BNO055::setGyroHighRateYduration(float duration){
Yajirushi 0:3807ce385b2a 3697 return ctrl->wr(1, BNO055P1_GYR_HR_Y_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
Yajirushi 0:3807ce385b2a 3698 }
Yajirushi 0:3807ce385b2a 3699
Yajirushi 0:3807ce385b2a 3700 /* ==================================================================
Yajirushi 0:3807ce385b2a 3701 * 角速度センサーのHighRate割り込み設定(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3702 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3703 * returns:
Yajirushi 0:3807ce385b2a 3704 * 角速度センサーのHighRate割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3705 */
Yajirushi 0:3807ce385b2a 3706 char BOARDC_BNO055::getGyroHighRateZsetting(){
Yajirushi 0:3807ce385b2a 3707 return ctrl->rr(1, BNO055P1_GYR_HR_Z_SET);
Yajirushi 0:3807ce385b2a 3708 }
Yajirushi 0:3807ce385b2a 3709
Yajirushi 0:3807ce385b2a 3710 /* ==================================================================
Yajirushi 0:3807ce385b2a 3711 * 角速度センサーのHighRate割り込み設定(Z軸のみ、実際の値)を取得する
Yajirushi 0:3807ce385b2a 3712 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3713 * 引数&hyst: アドレス参照引数:関数実行後、この変数にヒステリシスの値が格納される
Yajirushi 0:3807ce385b2a 3714 * 引数&thres: アドレス参照引数:関数実行後、この変数にスレッショルドの値が格納される
Yajirushi 0:3807ce385b2a 3715 */
Yajirushi 0:3807ce385b2a 3716 void BOARDC_BNO055::getGyroHighRateZsetting_dps(float &hyst, float &thres){
Yajirushi 0:3807ce385b2a 3717 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3718 hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3719 thres = 0.0f;
Yajirushi 0:3807ce385b2a 3720
Yajirushi 0:3807ce385b2a 3721 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3722 case 0:
Yajirushi 0:3807ce385b2a 3723 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3724 thres = 62.5;
Yajirushi 0:3807ce385b2a 3725 break;
Yajirushi 0:3807ce385b2a 3726 case 1:
Yajirushi 0:3807ce385b2a 3727 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3728 thres = 31.25;
Yajirushi 0:3807ce385b2a 3729 break;
Yajirushi 0:3807ce385b2a 3730 case 2:
Yajirushi 0:3807ce385b2a 3731 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3732 thres = 15.62;
Yajirushi 0:3807ce385b2a 3733 break;
Yajirushi 0:3807ce385b2a 3734 case 3:
Yajirushi 0:3807ce385b2a 3735 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3736 thres = 7.81;
Yajirushi 0:3807ce385b2a 3737 break;
Yajirushi 0:3807ce385b2a 3738 case 4:
Yajirushi 0:3807ce385b2a 3739 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3740 thres = 3.90;
Yajirushi 0:3807ce385b2a 3741 break;
Yajirushi 0:3807ce385b2a 3742 }
Yajirushi 0:3807ce385b2a 3743
Yajirushi 0:3807ce385b2a 3744 char val = ctrl->rr(1, BNO055P1_GYR_HR_Z_SET);
Yajirushi 0:3807ce385b2a 3745
Yajirushi 0:3807ce385b2a 3746 hyst *= (float)((val & 0x60) * 1.0);
Yajirushi 0:3807ce385b2a 3747 thres *= (float)((val & 0x1F) * 1.0);
Yajirushi 0:3807ce385b2a 3748 }
Yajirushi 0:3807ce385b2a 3749
Yajirushi 0:3807ce385b2a 3750 /* ==================================================================
Yajirushi 0:3807ce385b2a 3751 * 角速度センサーのHighRate割り込み設定(Z軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3752 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3753 * 引数setting: 角速度センサーのHighRate割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3754 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3755 * returns:
Yajirushi 0:3807ce385b2a 3756 * -1 失敗
Yajirushi 0:3807ce385b2a 3757 * 1 成功
Yajirushi 0:3807ce385b2a 3758 */
Yajirushi 0:3807ce385b2a 3759 char BOARDC_BNO055::setGyroHighRateZsetting(char setting){
Yajirushi 0:3807ce385b2a 3760 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, setting);
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 * 引数hystVal: ヒステリシス
Yajirushi 0:3807ce385b2a 3767 * 引数thresVal: スレッショルド
Yajirushi 0:3807ce385b2a 3768 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3769 * returns:
Yajirushi 0:3807ce385b2a 3770 * -1 失敗
Yajirushi 0:3807ce385b2a 3771 * 1 成功
Yajirushi 0:3807ce385b2a 3772 */
Yajirushi 0:3807ce385b2a 3773 char BOARDC_BNO055::setGyroHighRateZsetting_dps(float hystVal, float thresVal){
Yajirushi 0:3807ce385b2a 3774 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3775 float hyst = 0.0f;
Yajirushi 0:3807ce385b2a 3776 float thres = 0.0f;
Yajirushi 0:3807ce385b2a 3777
Yajirushi 0:3807ce385b2a 3778 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3779 case 0:
Yajirushi 0:3807ce385b2a 3780 hyst = 62.26;
Yajirushi 0:3807ce385b2a 3781 thres = 62.5;
Yajirushi 0:3807ce385b2a 3782 break;
Yajirushi 0:3807ce385b2a 3783 case 1:
Yajirushi 0:3807ce385b2a 3784 hyst = 31.13;
Yajirushi 0:3807ce385b2a 3785 thres = 31.25;
Yajirushi 0:3807ce385b2a 3786 break;
Yajirushi 0:3807ce385b2a 3787 case 2:
Yajirushi 0:3807ce385b2a 3788 hyst = 15.56;
Yajirushi 0:3807ce385b2a 3789 thres = 15.62;
Yajirushi 0:3807ce385b2a 3790 break;
Yajirushi 0:3807ce385b2a 3791 case 3:
Yajirushi 0:3807ce385b2a 3792 hyst = 7.78;
Yajirushi 0:3807ce385b2a 3793 thres = 7.81;
Yajirushi 0:3807ce385b2a 3794 break;
Yajirushi 0:3807ce385b2a 3795 case 4:
Yajirushi 0:3807ce385b2a 3796 hyst = 3.89;
Yajirushi 0:3807ce385b2a 3797 thres = 3.90;
Yajirushi 0:3807ce385b2a 3798 break;
Yajirushi 0:3807ce385b2a 3799 }
Yajirushi 0:3807ce385b2a 3800
Yajirushi 0:3807ce385b2a 3801 char hystChar = (char)((hystVal / hyst) + 0.5);
Yajirushi 0:3807ce385b2a 3802 char thresChar = (char)((thresVal / thres) + 0.5);
Yajirushi 0:3807ce385b2a 3803
Yajirushi 0:3807ce385b2a 3804 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, ((hystChar << 5) | thresChar));
Yajirushi 0:3807ce385b2a 3805 }
Yajirushi 0:3807ce385b2a 3806
Yajirushi 0:3807ce385b2a 3807 /* ==================================================================
Yajirushi 0:3807ce385b2a 3808 * 角速度センサーのHighRate割り込み継続発生閾値(Z軸のみ)を取得する
Yajirushi 0:3807ce385b2a 3809 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3810 * returns:
Yajirushi 0:3807ce385b2a 3811 * HighRate割り込み継続発生閾値[単位:ミリ秒]
Yajirushi 0:3807ce385b2a 3812 */
Yajirushi 0:3807ce385b2a 3813 float BOARDC_BNO055::getGyroHighRateZduration(){
Yajirushi 0:3807ce385b2a 3814 return (float)(1 + ctrl->rr(1, BNO055P1_GYR_DUR_Z)) * 2.5;
Yajirushi 0:3807ce385b2a 3815 }
Yajirushi 0:3807ce385b2a 3816
Yajirushi 0:3807ce385b2a 3817 /* ==================================================================
Yajirushi 0:3807ce385b2a 3818 * 角速度センサーのHighRate割り込み継続発生閾値(Z軸のみ)を設定する
Yajirushi 0:3807ce385b2a 3819 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3820 * 引数duration: HighRate割り込み継続発生閾値[単位:ミリ秒]
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::setGyroHighRateZduration(float duration){
Yajirushi 0:3807ce385b2a 3827 return ctrl->wr(1, BNO055P1_GYR_HR_Z_SET, (char)(((duration / 2.5) - 1.0) + 0.5));
Yajirushi 0:3807ce385b2a 3828 }
Yajirushi 0:3807ce385b2a 3829
Yajirushi 0:3807ce385b2a 3830 /* ==================================================================
Yajirushi 0:3807ce385b2a 3831 * 角速度センサーのAnyMotion割り込み閾値を取得する
Yajirushi 0:3807ce385b2a 3832 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3833 * returns:
Yajirushi 0:3807ce385b2a 3834 * AnyMotion割り込み閾値[単位:dps]
Yajirushi 0:3807ce385b2a 3835 */
Yajirushi 0:3807ce385b2a 3836 float BOARDC_BNO055::getGyroAnyMotionThreashold(){
Yajirushi 0:3807ce385b2a 3837 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3838 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3839
Yajirushi 0:3807ce385b2a 3840 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3841 case 0:
Yajirushi 0:3807ce385b2a 3842 scale = 1.0f;
Yajirushi 0:3807ce385b2a 3843 break;
Yajirushi 0:3807ce385b2a 3844 case 1:
Yajirushi 0:3807ce385b2a 3845 scale = 0.5;
Yajirushi 0:3807ce385b2a 3846 break;
Yajirushi 0:3807ce385b2a 3847 case 2:
Yajirushi 0:3807ce385b2a 3848 scale = 0.25;
Yajirushi 0:3807ce385b2a 3849 break;
Yajirushi 0:3807ce385b2a 3850 case 3:
Yajirushi 0:3807ce385b2a 3851 scale = 0.125;
Yajirushi 0:3807ce385b2a 3852 break;
Yajirushi 0:3807ce385b2a 3853 case 4:
Yajirushi 0:3807ce385b2a 3854 scale = 0.0625;
Yajirushi 0:3807ce385b2a 3855 break;
Yajirushi 0:3807ce385b2a 3856 }
Yajirushi 0:3807ce385b2a 3857
Yajirushi 0:3807ce385b2a 3858 return (1.0f * ctrl->rr(1, BNO055P1_GYR_AM_THRES)) * scale;
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 * 引数threashold: AnyMotion割り込み閾値[単位:dps]
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::setGyroAnyMotionThreashold(float threashold){
Yajirushi 0:3807ce385b2a 3871 char r = getGyroConfig_0();
Yajirushi 0:3807ce385b2a 3872 float scale = 0.0f;
Yajirushi 0:3807ce385b2a 3873
Yajirushi 0:3807ce385b2a 3874 switch(r & 0x07){
Yajirushi 0:3807ce385b2a 3875 case 0:
Yajirushi 0:3807ce385b2a 3876 scale = 1.0f;
Yajirushi 0:3807ce385b2a 3877 break;
Yajirushi 0:3807ce385b2a 3878 case 1:
Yajirushi 0:3807ce385b2a 3879 scale = 0.5;
Yajirushi 0:3807ce385b2a 3880 break;
Yajirushi 0:3807ce385b2a 3881 case 2:
Yajirushi 0:3807ce385b2a 3882 scale = 0.25;
Yajirushi 0:3807ce385b2a 3883 break;
Yajirushi 0:3807ce385b2a 3884 case 3:
Yajirushi 0:3807ce385b2a 3885 scale = 0.125;
Yajirushi 0:3807ce385b2a 3886 break;
Yajirushi 0:3807ce385b2a 3887 case 4:
Yajirushi 0:3807ce385b2a 3888 scale = 0.0625;
Yajirushi 0:3807ce385b2a 3889 break;
Yajirushi 0:3807ce385b2a 3890 }
Yajirushi 0:3807ce385b2a 3891
Yajirushi 0:3807ce385b2a 3892 return ctrl->wr(1, BNO055P1_GYR_AM_THRES, (char)((threashold / scale) + 0.5));
Yajirushi 0:3807ce385b2a 3893 }
Yajirushi 0:3807ce385b2a 3894
Yajirushi 0:3807ce385b2a 3895 /* ==================================================================
Yajirushi 0:3807ce385b2a 3896 * 加速度センサーのAnyMotion割り込み閾値を取得する
Yajirushi 0:3807ce385b2a 3897 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3898 * returns:
Yajirushi 0:3807ce385b2a 3899 * AnyMotion割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3900 */
Yajirushi 0:3807ce385b2a 3901 char BOARDC_BNO055::getAccAnyMotionSetting(){
Yajirushi 0:3807ce385b2a 3902 return ctrl->rr(1, BNO055P1_GYR_AM_SET);
Yajirushi 0:3807ce385b2a 3903 }
Yajirushi 0:3807ce385b2a 3904
Yajirushi 0:3807ce385b2a 3905 /* ==================================================================
Yajirushi 0:3807ce385b2a 3906 * 加速度センサーのAnyMotion割り込み閾値を設定する
Yajirushi 0:3807ce385b2a 3907 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3908 * 引数setting: AnyMotion割り込み設定レジスタ値
Yajirushi 0:3807ce385b2a 3909 * ------------------------------------------------------------------
Yajirushi 0:3807ce385b2a 3910 * returns:
Yajirushi 0:3807ce385b2a 3911 * -1 失敗
Yajirushi 0:3807ce385b2a 3912 * 1 成功
Yajirushi 0:3807ce385b2a 3913 */
Yajirushi 0:3807ce385b2a 3914 char BOARDC_BNO055::setAccAnyMotionSetting(char setting){
Yajirushi 0:3807ce385b2a 3915 return ctrl->wr(1, BNO055P1_GYR_AM_SET, setting);
Yajirushi 0:3807ce385b2a 3916 }