2011年5月3日火曜日

Arduino で OSC (実践篇)


前回は IO_test_aduino を動かしました。
このサンプルでは OSC を送って LED をOn/Off しましたが、OSC で受信した値を使用していませんでした。
OSC アドレス「/ard/led」にデータを送ると、どんな値でも(値がなくても)、LED の On/Off を交互にします。

今回はより実用的に、「1」を送るとOn、「0」を送るとOff というようにしてみましょう。

Digital 出力の High/Low で、LED を点灯するだけなので、回路図は省略します。Digital2, 3, 4, 5 を使いました。
ネットワークの設定は前回と同じです。

受信した値を使用するには、受信したメッセージオブジェクトに対して、getArgInt() または getArgFloat() を送ります。
詳しくはこのサンプルを参考にして下さい。

File > Examples > OSCClass > example_OSC > simple recieve > Arduino_Server

今回は、Int で0 または 1 を送るので、その値を if で場合分けして、LED をOn/Off しました。
それぞれのポート毎に別のOSC アドレスを割り当てて、ledProcess() を以下のように変更しました。

void ledProcess(OSCMessage *mes, int port){

if(mes-> getArgInt(0)){
digitalWrite(port, HIGH); //LED ON
}else{
digitalWrite(port, LOW); //LED OFF
}

}
注意点
1. 前回同様、OSC アドレスの比較時に先頭の"/" を付けない事。
2. 原因はよくわからないのですが、second アドレスが3文字 (/ard/led) だと受信できないことがあったので、4文字 (/ard/led1, /ard/led2, /ard/led3...) にしました。

スケッチはこちらです。(サンプルスケッチの改変です。私の権利主張はしません。)

PureData (Pd_extended) でOSC を送信する場合、Toggle オブジェクトをつけると、元の動作と同様になります。

よろしければ Puredata のOSC 送受信サンプルもどうぞ。 →こちらから。

0 件のコメント:

コメントを投稿