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 のスレーブとして利用できる。