マスターからメッセージを受け取る。"bluetooth.nxc"で他のファイルから呼び出せます。基本的に上記にある3つの命令(sendmsg,receive,respond)を使うのですが、既に出来つつあったchikuwa氏のアーム操作のプログラムに組み込む際に以下の問題点が浮上しました。スレーブが受け取ったメッセージに応じてプログラム条件分岐させることが出来ない。receiveは単に目的のメッセージが来るまで待機する機能しかありません。}}みたいな感じで使えばもっと汎用性が高まりました。結局今回は条件分岐がいるところではSendRemoteNumberとReceiveRemoteNumberを使って対処しました。考えていればもっと入力の手間が少なくなり通信関連の作業時間を小さくすることが出来たはずです。最初作成したとき、マスター側は送信は成功しましたがスレーブ側の応答に反応できませんでした。同じメールボックスに双方のメッセージを記録していたのですが、書き換えのタイミングが適切でなかったようです。マスターの送信とスレーブの応答の記録に別々のメールボックスを使用することで解決しました。†chikuwa氏のプログラムに組み込まれています。缶を検知→スレーブへアームを降ろすように要請(sendmsg)→受信した後(receive)スレーブがアームを降ろしマスターへ応答(respond)→前進の後缶をつかんでアームを上昇させるよう要請(sendmsg)→缶をつかんでアームを上昇させた後応答(receive&respond)→次のステップへといった具合です。今回の課題ではライン上から外れた場所にも缶が置いてあります。これを取らずして得点は稼げません。このプログラムはまず右回転しながらロボットの正面方向の対象物までの距離を計測し、一番近いもの(=缶)に向きを調整します。超音波センサを用いて計測するのですが、これがなかなかくせ者の様で奇麗に決まりませんでした。そのため上記の写真にもあるようにロボットにガイドを設置することになりました。マシンと缶との距離を測る。右回転しながら10ms間隔で60回計測。//iが1〜60に加算される間はzxc[i]に超音波センサの値を代入。SensorUS(S4);}/*記録したデータの中から最小値(距離)を求める。//j番地におけるzxcの値がminより小さい場合、minにzxcの値を代入。j;}}/***NXTはViewメニューにてそれぞれのセンサの値をリアルタイムで見ることができるのですが、**//***超音波センサは計測範囲外になると”?????”と表示します。この場合にメモリに何が書き**//***込まるのか分からないのですが、もし0でも代入されてしまうと困るので100を代入してい***//***ます。最小値と一致するまで左回転。);PlaySound(SOUND_UP);Off(OUT_AB);ResetScreen();Wait(1000);/*缶に接近。最初にこのプログラムを作ったときは、ロボットの位置を調整するのに以下の式でモーターの回転量を計算してマシンの向きを変えていました。ロボットの重量が重く後輪が滑らかに追従しなかったため想定よりも位置修正にブレが生じたので上記のように変更しました。†チームの仲間と早い時期から議論と試行錯誤を重ねて本番でとても良い結果を残す事が出来てよかったと思います。仲間にアドヴァイス出来た点も良かったです。(まだまだ入門レベルではありますが...)自発的にプログラミングについて調べて実際に応用したことは、怠け癖のある自分にしてはだいぶ進歩したなと思います。永遠の自宅通の名に甘んじて作業に遅刻した事。ロボット制作の重要な部分にあまり携わる事ができなかったこと。(Redcicudu氏の力量が凄すぎたからちょっと仕方が無いかもしれない)割と家でコードを書かずに、講義や集まった時にその場で書いてしまった怠け精神。コードの記述量と記述に費やした時間の少なさ。多ければ良いとは一概には言えないが、他の二人の作業量と比較すると不満を言われても仕方ないかもしれない。Random関数の値をかえるとえらく印象が変わる点が面白いです(笑)これを鳴らすとあまり良い顔をされないので注意が必要です。