task main()
三角形に動く†
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150);
Off(OUT_A+OUT_C);
}
「左」を描くために最初に作ったプログラム†
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
OnRev(OUT_B);
Wait(300);
OnFwd(OUT_B);
Wait(100);
OnRev(OUT_A);
OnRev(OUT_C);
Wait(200);
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(150);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(100);
OnRev(OUT_A);
OnRev(OUT_C);
OnFwd(OUT_B);
Wait(300);
OnFwd(OUT_B);
Wait(100);
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(150);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(100);
OnFwd(OUT_A);
OnFwd(OUT_C);
OnRev(OUT_B);
Wait(200);
OnFwd(OUT_B);
Wait(100);
OnRev(OUT_A);
OnRev(OUT_C);
Wait(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
OnFwd(OUT_A);
OnFwd(OUT_C);
OnRev(OUT_B);
Wait(100);
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(150);
OnRev(OUT_A);
OnRev(OUT_C);
Wait(150);
OnFwd(OUT_A);
OnFwd(OUT_C);
OnRev(OUT_B);
Wait(250);
Off(OUT_A+OUT_C+OUT_B);
}
頭の中で完璧に作ったと思っていても実際には訳の分からない動きをした。
ライントレース(モーター2個、センサー1個)†
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサー2
while(true){
if(SENSOR_2 < 40 ){ //感度40以下ならば方輪走行
OnFwd(OUT_A);
Off(OUT_C);}
else{ //感度40以上ならば反対の車輪で
Off(OUT_A); 方輪走行
OnFwd(OUT_C); }
}
}
意図していた動きはするものの、急なカーブには対応できない。
明るいところを探すロボット†
int light_max=0;
int i=0; int i_max;
task main()
{
for(i=0; i<40; i++){
OnFwd(OUT_A); //ロボットを同じ場所で回転させる
OnFwd(OUT_C);
Wait(3); //センサーが光を確実に捕らえられるように少し
Off(OUT_A+OUT_C); ずつ回転させる
Wait(5);
if(SENSOR_2>light_max){
light_max=SENSOR_2;
i_max=i;}
}
Wait(100); //一度目と同方向に回転させるため一度止めないと
repeat(i_max){ 判りにくい
OnFwd(OUT_A+OUT_C); //光の最大値を観測した地点まで回転。
Wait(3); その際一度目と同じような動きをさせ誤差
Off(OUT_A+OUT_C); を減らす
Wait(5);}
}
最大値の使い方が判らずに大分苦労しました。