前回は 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 件のコメント:
コメントを投稿