立命館守山高校 Sci-tech部 2011年01月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

TJ3やe-GadgetをI2CでArduinoのセンサーノードとして使う

卒研が終わり、期末試験も終わった(いろいろな意味で)ので、ロボカップに向けてロボット開発を始めます。
ちなみに、卒研のレールガンは見事物理の最優秀になったので今度大学の900人収容のホールで発表になりました。
ロボットとレールガンの二本立て。
2月授業無いのに忙しくて死にそう。

さて、タイトル通りです。
C-Styleには既にe-Gadget同士のI2C通信機能が実装されているのですが、Slaveの送信側はそのまま、Arduinoでセンサの値を受信してしまおうと考えています。
なぜなら、Arduino UNOはアナログINが6つしかないので、このままでは今までのラインセンサの資源が使えません。
e-Gadgetは10個のアナログ入出力があるので、これを使おうと。
さらに、e-GadgetにはないデジタルピンがArduinoには多くあるのでタッチセンサなどはデジタル入力に割り振れます。
ぶっちゃけArduinoMEGAで良くね?って自分でも思いますが、まぁI2Cの勉強も兼ねてるので。
Arduino UNOは持ってるけどMEGAは持ってないよ!でもMEGAよりも高いTJ3やe-Gadgetはあるよ!って方はどうぞお使いください。

ということで、読みにくい事で有名(主に俺の中で)なC-StyleのI2C部分のコードを読み解いて、Arduinoで使えるようにプログラムを書きました。

#include <Wire.h>

void setup(){
//I2C通信開始
Wire.begin();
//シリアル通信開始
Serial.begin(9600);
}

void loop(){
int a;
a = gSlaveSensor(1, 0);
Serial.println(a); //シリアルで転送
delay(100);
}

//------------------------------------------------------------------------------
//I2Cのスレーブモードで動作するTJ3かe-Gadgetから、センサーの値を読み込みます。
// id:スレーブとして使用するTJ3のID(1~8), ch:TJ3側のセンサーポート(0~9)
unsigned int gSlaveSensor(unsigned char id, unsigned char ch){
typedef union { //受信データ用共用体
unsigned int W;
struct {
unsigned char L;
unsigned char H;
};
} U_UINT;
U_UINT data; // 受信データ
int adrs; //スレーブアドレス

adrs = (0x30 + (id - 1) * 2) >> 1; //Slave addressスレーブアドレス変換

//通信開始
Wire.beginTransmission(adrs);
//要求バイト数
Wire.send(2);
//SensorReadCommand
Wire.send(0x81);
//CH設定
Wire.send(ch);
//通信終了
Wire.endTransmission();

Wire.requestFrom(adrs, 2);
if(Wire.available()>1){
//1バイト分のデータの読み込み
data.L = Wire.receive();
//次の1バイト分のデータを読み込み
data.H = Wire.receive();
}

return (data.W);
}



こんな感じです。
gSlaveSensorにスレーブTJ3の番号とセンサの番号を渡してやればそのセンサの値を返します。
TJ3側は普通にC-Styleから、説明書通りに設定してください。

Arduino側のプログラムはすぐ組み上がりましたが、C-Styleのヘッダの解読に一日かかりました。
自分が不勉強なのもあるのですが、それにしても読みにくいしコメントも書いてない。
ダイセンのプログラマーは外人らしいですが、なんというかまぁ人に読ませる気が無いとしか思えません。


ちなみに、ソースコードは自由に使って頂いて結構です。
今までTJ3で組み立てていて、Arduinoに手を出してみたがセンサーポートが足らなくてMEGA買いたいけどお金無いよーって方に是非。
スポンサーサイト
プロフィール

立命館守山高校 Sci-tech部

Author:立命館守山高校 Sci-tech部
立命館守山高校、Sci-tech(サイテック)部のブログです。
研究の途中結果や、日記、連絡事項などを載せていきます。

主な成績
ロボカップジュニアレスキューセカンダリ2010
世界大会5位

やってること
バイオディーゼル燃料を使ったバイオカートの制作
AR(拡張現実)の研究
クルーレスソーラーボート大会への出場
ロボカップジュニアへの出場
レールガン制作
など

リンク
過去ログ
最新記事
最新コメント
アクセスカウンタ
合計閲覧者数

現在の閲覧者数
カテゴリ
検索フォーム
アクセス解析
    ブロとも申請フォーム

    この人とブロともになる

    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。