* 3.1 少しだけ複雑に [#p2002f5f]

最初の簡単なプログラムを実行することができたら、 もう少しだけ複雑なプログラムを作ってみましょう。 

 task main()
 {
     OnFwd(OUT_A+OUT_C); // A と C 出力のモータを正回転
     Wait(300);
     OnRev(OUT_C);       // C 出力のモータを逆回転
                         // これで方向変換を開始する
     Wait(200);          // この時間で方向変換の角度が決まる
     OnFwd(OUT_C);       // C 出力のモータを正回転
     Wait(300);          // 再び前進
     OnRev(OUT_A+OUT_C); // 後進
     Wait(300);
     Float(OUT_A+OUT_C); // Off より滑らかに止まる
 }

モータを制御するときによく使う命令

 On(OUT_A+OUT_C);    // A出力とC出力のモータを回転させる
 Off(OUT_A);         // A出力のモータを止める
 Float(OUT_A);       // A出力のモータにトルクをかけない
 Fwd(OUT_A);         // A出力のモータの回転を正にセットする
 Rev(OUT_A);         // A出力のモータの回転の負にセットする
 Toggle(OUT_A);      // A出力のモータを反転させる
 OnFwd(OUT_A);       // A出力モータを正回転させる
 OnRev(OUT_A);       // A出力モータを負回転させる
 OnFor(OUT_A,300);   // A出力のモータを3秒間回転させる

★ 練習問題 3.1

一辺が約50cmの正方形に沿ってロボットを動かすためのプログラムを 作成しなさい。 

* 3.2 同じ動作の繰り返し [#zc495a8e]

 task main()
 {
     repeat(5){
         OnFwd(OUT_A+OUT_C); Wait(200);  // 2秒間前進
         OnRev(OUT_A+OUT_C); Wait(200);  // 2秒間後進
     }
 
     Float(OUT_A+OUT_C);                 // Off より滑らかに止まる
 }

repeat を使えば、 同じ動作を繰り返し実行することができます。 この例の場合、2秒間前進して2秒間後進するという動作を5回繰り返します。 

★ 練習問題 3.2

練習問題 3.1 で作成したプログラムを repeat を用いて書き直しなさい。 

* 3.3 定義された値を使う [#ibe51a97]

 #define MOVE_TIME 200
 
 task main()
 {
     OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME);  // 2秒間前進
     OnRev(OUT_A+OUT_C); Wait(MOVE_TIME);  // 2秒間後進
     Off(OUT_A+OUT_C);
 }

この例では、#define を使ってあらかじめ 200 に定義された 定数 MOVE_TIME を Wait の引数に使っています。
このように定義しておけば、動作時間などの値を変更する時でも
最初の定義だけを変更するだけで途中のプログラムは変更せずに済みます。 

定数名は x,y のような簡単なものでも構いませんが、
少々長くなってもなるべくその定数の意味がわかるような名前を付けましょう。
また、定数名は慣習的に大文字にすることが多いです
(文法上は小文字でも構いません)。 

★ 練習問題 3.3

ロボットに鉛筆またはペンを取り付け、 A3 用紙の上に★型を描かせなさい。 

* 3.4 変数を使う [#x2096408]

 int move_time ;          // move_time という整数型の変数を定義  
 
 task main()
 {
     move_time = 100 ;    // move_time に 100 を代入
     OnFwd(OUT_A+OUT_C); Wait(move_time);  // 1秒間前進 
 
     move_time = 200 ;    // move_time に 200 を代入
     OnRev(OUT_A+OUT_C); Wait(move_time);  // 2秒間後進

     move_time = move_time + 100 ;         // move_time の値を 100 増やす
     OnRev(OUT_A+OUT_C); Wait(move_time);  // 3秒間後進
 
     Off(OUT_A+OUT_C);
 }

変数を使えば、
この例のようにプログラムの実行中にその値を変更することができ、
四則演算などの計算も容易にできます。 

ここで = という記号は、右辺の値を左辺の値に代入するという演算子です。
つまり、 

 move_time = move_time + 100 ;

は、もとの(右辺の) move_time という変数に 100 加えたものを新たに move_time という変数に代入するという意味です
(つまり = は等しいという意味ではありません)。 

また、この代入の命令は、 

 move_time += 100 ;

のように簡単に書くこともできます。 

足し算の他にも以下のような演算ができます。 

 -  引き算
 *  かけ算
 /  割り算
 %  割り算の余り

また += と同様に、 

 -= 
 *=
 /=

などの演算子も使えます。 
さらに特別な場合として、1 増やしたり、 1 減らしたりする場合には、 

 x++ ;  // x = x + 1 ; と同じ
 x-- ;  // x = x - 1 ; と同じ

という演算子(インクリメンタル演算子・デクリメンタル演算子)を
使うとより短く表記できます。 

Seiji Matsumoto Last modified: Sun Nov 17 10:53:11 UTC 2002

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