これ、NXTねたなのか、Arduinoねたなのか迷いますが・・・(そんなことで悩むな!)
目的は、NXTに接続するセンサーを増やすことです。
Arduinoに複数のセンサーを接続して、そのセンサーをNXTから制御しようという考えです。
きっと、出来て当たり前なのですが・・・自分でやってみることに意義がある・・・と勝手に決めました。
NXTとArduinoの間の接続は勿論I2Cです。
じゃあまずは、NXTからコマンドをArduinoに送るところからやりたいと思います。
NXT側では単にコマンドをI2Cに送ります。
SetSensorLowspeed ( IN_1 );
I2CWrite( IN_1 , 2 , Wbuf );
単純に、こんな感じです。
Arduino側は、
void ReceiveEvent( int num )
{
int i,d;
for( i=0 ; i<num ; i++ )
{
d = Wire.receive( );
}
}
void setup()
{
Wire.begin( I2C_ADR );
Wire.onReceive( ReceiveEvent );
}
こうすると、変数dにNXTが送り出したコマンドが読み込まれます。
余計な解説をすると・・・
NXTからのデータを受信すると、ReceiveEventが実行されます。 そのときに、NXTから送られたコマンドの数がパラメータとして渡されます。 そのコマンドの数だけ Wire.receive( ) でデータを読み出します。
これで、NXT⇒Arduinoの一方通行は可能になったのですが・・・
逆が・・・できません。
まだまだ研究が必要なようです。 orz