C-Style C-Code と Arduino IDE

C-Style の Advanced mode でサポートされていないセンサーを TJ3B に繋ぐためには C-Code で必要なプログラムを記述する必要がある。そんな場合に Arduino を利用すると都合がよい(Arduinoでロボ作れという声は置いておいて..)。

Arduino では様々なライブラリやサンプルが公開されおり、通販等で購入できるデバイスであれば、動作確認するまでは比較的簡単に作業できることが多い。なのでサンプル等見つからないデバイスは、事前に購入をやめることができる。せっかく購入したものを死蔵しないようにするため、動作確認は容易にしておくべきと考える。

TJ3B も Arduino も I2C が使えるので、インターフェースが I2C で電源電圧が同じ5Vのデバイスあれば、Arduino のコードをうまいこと移植すれば、TJ3B同じものが利用できる。

例えばコンパスセンサ HMC6352をArduinoで使う以下のサンプル(参考:「電子工作関係: e-GadgetやTJ3で方位センサーHMC6352を使う方法2」)と、C-Style のビルドバスにある D_I2C.c を比較すれば、移植の段取りがわかりやすいのでないかと思う。以下のソースのsetup()が D_I2C.c の set_hmc()、loop() が D_I2C.c の get_hmc() に相当する。

/**
   HMC6352 TEST
*/
#include "Wire.h"

//HMC6352 i2cスレーブアドレス
int compassAddress = 0x42 >> 1;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(compassAddress);   //Continuous Modeに設定
  Wire.write('G');      //RAM書き込み用コマンド
  Wire.write(0x74);     //書き込み先指定
  Wire.write(0x72);     //モード設定
  Wire.write('L');      //設定保存書き込み用コマンド
  Wire.endTransmission();
}

void loop() {
  int kakudo = 0;
  Wire.requestFrom(compassAddress, 2);  //デバイスに2バイトのデータを要求
  if (Wire.available() > 1) {   //データが2バイト分あり
    kakudo = Wire.read();
    kakudo = kakudo << 8;
    kakudo += Wire.read();
    kakudo /= 10;
    Serial.println(kakudo);
  }
  delay(100);
}


同様に C-Style のビルドバス中の Slv フォルダにある Ds_I2C.c ファイル内の i2c_cmd_job() を Arduino で実装すれば Arduino を TJ3B のスレーブとして利用できる。