GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるね岡宮です。
WireとSerial2は同じSCIチャネルSCI2を使用しているため、デフォルトでは同時に使用できません。ただ、同時に使用する場合も多々あると思いますので、WireをソフトウェアWireに切り替えできるようにライブラリをアップデートします。更新後のWireライブラリは以下です。
Wire.zip
ベストテクノロジーさんのGR-ROSE互換ボード「BTE095 FDIV-HC」に搭載されているBosch製IMUのBNO055で動作確認をしました。以前のバージョンにもソフトウェアWireは実装済みでしたが、そのままでは動作しませんでした。リード時のスレーブACK応答時、ACK前後でスレーブがSCLをLOWリリースしてWaitをかけていることが分かり、アップデート後のソフトウェアWireではこの仕様に対応しました。また、メンバ関数としてsetSoftWire(sda, scl)を追加することで、既存のWireサンプルに一行追加するだけで動作できるようにしました。
BNO055のサンプルプログラムをソフトウェアWireで動かすサンプルを以下の通り貼り付けます。デフォルトのサンプルに対して追加したのはWire.setSoftWire(21, 20)の部分です。なお、setFrequency(freq)で周波数を上げることができますが、最大はおよそ220kHzでした。デフォルトでは100kHz程度になります。
#include <Arduino.h>#include <Adafruit_Sensor.h>#include <Adafruit_BNO055.h>#include <utility/imumaths.h>Adafruit_BNO055 bno = Adafruit_BNO055(55);void setup(void){ Serial.begin(9600); delay(1000); Serial.println("Orientation Sensor Test"); Serial.println(""); Wire.setSoftWire(21, 20); // SDA, SCL /* Initialise the sensor */ if(!bno.begin()) { /* There was a problem detecting the BNO055 ... check your connections */ Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!"); while(1); } delay(1000); bno.setExtCrystalUse(true);}void loop(void){ /* Get a new sensor event */ sensors_event_t event; bno.getEvent(&event); /* Display the floating point data */ Serial.print("X: "); Serial.print(event.orientation.x, 4); Serial.print("\tY: "); Serial.print(event.orientation.y, 4); Serial.print("\tZ: "); Serial.print(event.orientation.z, 4); Serial.println(""); delay(100);}