- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007a/A10/課題3右]]
*プログラム [#l078167e]
*プログラム [#l078167]
**1.全方向から懐中電灯の方向を探して、懐中電灯に向けてブロックを投げるプログラム(こんどー) [#f93de149]
#define TURN_TIME 215 //一回転に要する時間(これはロボットを走らせる場所によって異なる)
sub throw()
{
OnRev(OUT_C);Wait(200);Off(OUT_C);
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1を光センサと定義
int time_peak,light_peak=0; //光の明るさの最大値とその時の時間の変数の初期値を0にする
ClearTimer(0); //タイマの値を0にする
OnRev(OUT_A);
while(FastTimer(0)<TURN_TIME) //一周するまでwhileの中を繰り返す
{
if(SENSOR_1>light_peak) //センサ1の値が現在の光の最大値よりも大きい場合
{
light_peak=SENSOR_1; //センサ1の値をlight_peakに代入
time_peak=FastTimer(0); //その時の時間をtime_peakに代入
}}
OnRev(OUT_A);
Wait(time_peak); //光の最大値を記憶したところまで回る
Off(OUT_A);
throw(); //ブロック(ホイール)を投げる
}
**2.ゆっくり動く懐中電灯に向かって進むプログラム(タマヂャン) [#n7a3bfe3]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1に光センサを定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3に光センサを定義
OnRev(OUT_A); //左に旋回(光を探し始める)
while(true) //(whileの中を繰り返す)
{
if(SENSOR_1>SENSOR_3) //センサ1の値がセンサ3の値よりも大きい
{
OnFwd(OUT_A); //右に旋回
}
if(SENSOR_1<SENSOR_3) //センサ1の値がセンサ3の値よりも小さい
{
OnRev(OUT_A); //左に旋回
}
}
}
**3.ゆっくり動く懐中電灯に向かって進み、懐中電灯の動きが止まればブロックを投げる(タマヂャン) [#e7324568]
#define RUN_TIME 020
#define TURN_TIME 210 //一周に要する時間(ロボを走らせる場所によって異なる)
sub turn_left()
{OnRev(OUT_A);Wait(RUN_TIME);}
sub turn_right()
{OnFwd(OUT_A);Wait(RUN_TIME);}
sub throw()
{OnRev(OUT_C);Wait(100);}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1を光センサと定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3を光センサと定義
int i; //変数iを定義(i:カウント)
int i_min=0,i_max=5;
int time_max,light_max=0; //光の最大値とその時の時間の変数の初期値を0に
int now,last=0; //変数nowtとlastを定義し初期値を0に(now:今回の動作、last:前回の動作)
ClearTimer(0); //タイマの値を0にする
OnRev(OUT_A); //(左に旋回し光を探し始める)
while(FastTimer(0)<TURN_TIME) //一周するまでwhileの中を繰り返す
{
if(SENSOR_1>light_max) //センサ1の値が現在の光の最大値よりも大きい場合
{
light_max=SENSOR_1; //センサ1の値をlight_maxに代入
time_max=FastTimer(0); //その時の時間をtime_maxに代入
}
}
Off(OUT_A);
OnRev(OUT_A);Wait(time_max); //光のある方向を向く
for(i=i_min;i<=i_max;) //カウントが0回から始まり5回以下の時forの中を繰り返す
{
if(SENSOR_1>SENSOR_3) //センサ1がセンサ3より大きい場合
{turn_left(); //左に曲がり
now=1; //この動作をnow=1とする
if(now==last)
{i=0; //もし、今回の動作が前の動作と同じ場合、カウントを0にする
}else{
i+=1; //今回の動作が前の動作と違う場合、カウントを+1し、
last=now;} //今回の動作をlastに代入する
}else{turn_right(); //センサ1がセンサ3より小さい場合、右に曲がり
now=0; //この動作をnow=0とする
if(now==last)
{ //もし、今回の動作と前回の動作が同じ場合、カウントを0にし
i=0;
}else{ //今回の動作と前回の動作が同じ場合、カウントを+1し
i+=1;
last=now;} //今回の動作をlastに代入
}
}
Off(OUT_A); //(カウントが5回になったら)停止し
throw(); //ブロック(ホイール)を投げる
Off(OUT_C); //
}