#navi(NQC入門)

(すみません、まだ作成中です)

RCXは赤外線を使用した通信機能を持っています。
このセクションでは、この通信機能を使って2台のRCXの動きを連係させてみましょう。

* 7.1 メッセージの送受信 [#w198ad4d]

RCX は 0 〜 255 までの値をメッセージとして送受信することができます。 

相手のRCXにメッセージを送信するためには
//
 SendMessage(i); // ただし i は 0〜255 の数字
//
というコマンドを使います。
一方、受信側のロボットでは、最後に受信した値を Message() で得ることができます。
そして
 ClearMessage();
という命令を使えば、 Message() の値を 0 に初期化することができます。 

例:

 // 送られたメッセージに従って左右に回転するロボットのプログラム
  
 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);
 #define stop_turning Off(OUT_A+OUT_C);
 
 task main()
 {
     while (true)
     {
         ClearMessage();           // Message() を 0 に設定
         until (Message() != 0);   // Message() に 0 以外の値が入るまで待つ
 
         if ( Message() == 1 ) turn_left;     // 1 を受信したときには左回転
         if ( Message() == 2 ) turn_right;    // 2 を受信したときには右回転
         if ( Message() == 3 ) stop_turning;  // 3 を受信したときにはストップ
     }
 }

 //    メッセージを送信するプログラム
 
 task main()
 {
     // 相手が反対側を向いていると受信できないので
     // 5 秒間メッセージを送り続ける
 
     ClearTimer(0);
     while ( Timer(0) <= 50 ) { SendMessage(1); }  // 最初の 5秒間 1 を送信する
     while ( Timer(0) <= 100 ) { SendMessage(2); } // 次の 5秒間 2 を送信する
     while ( Timer(0) <= 150 ) { SendMessage(3); } // さらに 5秒間 3 を送信する
 
     // SendMessage の後に Wait(50); くらいを挿入すると電池が節約できる?
 }

#navi(NQC入門)

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS