/*2021_11_28 *ArduinoをVS-RC003HV用ジャイロ/加速度/コンパスボード「VS-IX012」として動作させるスケッチ *【注意】 *このテキストファイルはWeb閲覧用に文字コードをANSIにしています。 *使用する際はこのページのスケッチを全コピーして新規スケッチに張り付ける形で使用してください。 *VS-RC003HVのSDAをArduinoのA4に、VS-RC003HVのSCLをArduinoのA5に接続してください。VS-RC003HV側はCH6でもCH7でも大丈夫です。 *もちろんですが、ArduinoとVS-RC003HVのGNDも接続してください。 *RobovieMaker2の拡張基板設定はVS-IX012のマニュアル通り行ってください。 *設定ダイアログでは、すべての項目において、オフセットを-32768、ゲインを1に設定してください。 *通信状態はNG、ステータスウィンドウではエラーが出ますが、なぜか通信できます。 *データシート等を読んで確認しましたが、おそらく仕様通りには通信できていません。ですが、一応値は安定して送信できています。 *実践投下していないので、そのうちバグが出てくるかもしれません。 *参考にしたスケッチ:@thun_build「VS-RC003HVとArduinoでI2C通信してIXBUS拡張基盤を自作する」 *https://qiita.com/thun_build/items/de429257ce70801fe46d */ //I2Cを使うためのライブラリをインクルード #include //パケット送信用の変数を宣言 byte tx_vsrc[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //スケッチ一番下にあるエリアで以下の変数に値を代入すると、VS-IX012のそれぞれのセンサとして値を送信できます。 //送信できる値の範囲は0〜255です。 byte accel_x = 0; //加速度センサX軸 byte accel_y = 0; //加速度センサY軸 byte accel_z = 0; //加速度センサZ軸 byte gyro_x = 0; //ジャイロセンサX軸 byte gyro_y = 0; //ジャイロセンサY軸 byte gyro_z = 0; //ジャイロセンサZ軸 byte temp = 0; //温度センサ byte magnet_x = 0; //方位センサX軸 byte magnet_y = 0; //方位センサY軸 byte magnet_z = 0; //方位センサZ軸 void setup() { //VS-IX012のI2Cバスアドレスの設定 Wire.begin(0xD0 / 2); //VS-RC003HVからセンサの値をリクエストされたときに発動する割り込み関数の設定 Wire.onRequest(requestEvent); } void loop() { //常に割り込み処理が働くため、ここに書いたスケッチはたぶん発動しません。 } void requestEvent() { tx_vsrc[0] = -128 + accel_x; tx_vsrc[2] = -128 + accel_y; tx_vsrc[4] = -128 + accel_z; tx_vsrc[8] = -128 + gyro_x; tx_vsrc[10] = -128 + gyro_y; tx_vsrc[12] = -128 + gyro_z; tx_vsrc[6] = -128 + temp; tx_vsrc[1] = -128 + magnet_x; tx_vsrc[3] = -128 + magnet_y; tx_vsrc[5] = -128 + magnet_z; Wire.write(tx_vsrc, 14); /*ここより下でセンサとして扱いたい数値を代入する処理をする。 【例:ArduinoのA0に接続されたセンサの値を送信する】 //センサの値を読み込むための変数を宣言 long value = 0; //センサの値を100回読み込み for(byte i = 0; i<100; i++) value += analogRead(0); //加速度センサのX軸扱いで、値を設定 //(平均をとるために÷100,Ad変換の最大1023を256に収めるための÷4を合わせて÷400) accel_x = value / 400; //これで次の割り込みが発生したときに、設定した値が書き込まれる。 */ }