#navi(NQC入門) 目次 #contents * 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 ; と同じ という演算子(インクリメンタル演算子・デクリメンタル演算子)を 使うとより短く表記できます。 #navi(NQC入門)