- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C2]]
*五角形に動くキャタピラロボット [#z24f6e92]
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(150);
repeat(4){
OnRev(OUT_C);
Wait(80);
OnFwd(OUT_C);
Wait(150);
}
Off(OUT_A+OUT_C);
}
-何秒回転させるかを決めるのが大変だった。
-repeat使って簡単に見やすく作ってみました☆
*「左」を書くロボット [#kadai1]
task main()
{
OnFwd(OUT_A+OUT_C); //1画目
Wait(100);
OnFwd(OUT_B); //ペン上げ
Wait(50);
Off(OUT_A+OUT_B+OUT_C);
Wait(200);
OnRev(OUT_A);
Wait(130);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //2画目
Wait(150);
OnFwd(OUT_B); //ぺン上げ
Wait(50);
Off(OUT_A+OUT_B+OUT_C);
Wait(200);
OnFwd(OUT_A+OUT_C);
Wait(200);
OnRev(OUT_A);
Wait(108);
OnRev(OUT_A+OUT_C);
Wait(75);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //3画目
Wait(90);
OnFwd(OUT_B); //ペン上げ
Wait(50);
Off(OUT_A+OUT_B+OUT_C);
Wait(200);
OnFwd(OUT_A+OUT_C);
Wait(180);
OnRev(OUT_A);
Wait(85);
OnRev(OUT_A+OUT_C);
Wait(85);
OnFwd(OUT_A+OUT_C); //4画目
OnRev(OUT_B); //ペン下げ
Wait(55);
OnFwd(OUT_B); //ペン上げ
Wait(50);
Off(OUT_A+OUT_B+OUT_C);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(90);
OnRev(OUT_A+OUT_C);
Wait(15);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //5画目
Wait(120);
Off(OUT_A+OUT_B+OUT_C);
}
-3画目からが難しかった。
-予想以上に思いどおりに動いてくれなくて苦労した。
-サブルーチンを使って書き換えると下のようになった。少しは見やすくなったと思う。
sub up_pen() //ペン上げ
{
OnFwd(OUT_B);
Wait(50);
Off(OUT_A+OUT_B+OUT_C);
Wait(200);
}
task main()
{
OnFwd(OUT_A+OUT_C); //1画目
Wait(100);
up_pen();
OnRev(OUT_A);
Wait(130);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //2画目
Wait(150);
up_pen();
OnFwd(OUT_A+OUT_C);
Wait(200);
OnRev(OUT_A);
Wait(108);
OnRev(OUT_A+OUT_C);
Wait(75);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //3画目
Wait(90);
up_pen();
OnFwd(OUT_A+OUT_C);
Wait(180);
OnRev(OUT_A);
Wait(85);
OnRev(OUT_A+OUT_C);
Wait(85);
OnFwd(OUT_A+OUT_C); //4画目
OnRev(OUT_B); //ペン下げ
Wait(55);
up_pen();
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(90);
OnRev(OUT_A+OUT_C);
Wait(15);
OnRev(OUT_B); //ペン下げ
OnRev(OUT_A+OUT_C); //5画目
Wait(120);
Off(OUT_A+OUT_B+OUT_C);
}
*センサを使って机の周りを動くキャタピラロボット [#kadai2]
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_TOUCH);
while(true)
{
if(SENSOR_3 == 1) //右のセンサが押されている
{
OnFwd(OUT_A+OUT_C); //直進
} else { //右のセンサが押されていない
Off(OUT_C); //右に回る
OnFwd(OUT_A);
}
if(SENSOR_1 == 1) //左のセンサが押されている
{
OnRev(OUT_A); //左に曲がる
OnFwd(OUT_C); Wait(170);
}
}
Off(OUT_A+OUT_C);
}
-机の足にタイヤがひっかからないように、センサがうまく働くように工夫してロボットを作った。
-センサがうまく働かず、右に回りすぎて困った。
#ref(img_0007_Medium.jpg)
*黒い線上を動くロボット(モータ2個、センサ1個) [#d5b47586]
*黒い線上を動くロボット(モータ2個、センサ1個) [#kadai3-1]
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
while (true) {
if (SENSOR_1 < 40) { // 線上にいるとき
OnFwd(OUT_A);
Off(OUT_C);
} else { // 線から外れたとき
Off(OUT_A);
OnFwd(OUT_C);
}
}
}
-これはとりあえず一周はするが、ショ−トカットしてしまう。
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
while (true) {
if (SENSOR_1<40) {
if (SENSOR_1<40) { // 線上にいるとき
OnFwd(OUT_C+OUT_A);
} else {
} else { // 線から外れたとき
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(50);
OnFwd(OUT_C);
OnRev(OUT_A);
until(SENSOR_1<40);
}
}
}
-何種類か考えたがやはりうまくいかない。
-何種類か考えたが、やはりうまくいかない。
早くもプログラミングの壁にぶつかってしまったみたい。早く壁を乗り越えたい…。
コメントをお願いします
-サブルーチンや関数を使ってみましょう。 -- [[松本(教員)]] &new{2005-11-11 (金) 22:59:48};
#comment