- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/C3/課題3左]]
#define right SetPower(OUT_A,2);SetPower(OUT_C,1);OnFwd(OUT_C+OUT_A);//右に曲がりつつ進む
#define left SetPower(OUT_C,2);SetPower(OUT_A,1);OnFwd(OUT_C+OUT_A); //左に曲がりつつ進む
このPGの課題、かろうじて動くがまだ滑らかに動くことができない
#define right SetPower(OUT_A,7);SetPower(OUT_C,3);OnFwd(OUT_C+OUT_A);//右に曲がりつつ進む
#define left SetPower(OUT_C,7);SetPower(OUT_A,3);OnFwd(OUT_C+OUT_A); //左に曲がりつつ進む
#define stoP Off(OUT_A+OUT_C); //停止
#define senkair SetPower(OUT_C+OUT_A,3);OnRev(OUT_A);OnFwd(OUT_C); //右旋回
#define senkail SetPower(OUT_C+OUT_A,3);OnRev(OUT_C);OnFwd(OUT_A); //左旋回
#define senkair SetPower(OUT_C+OUT_A,10);OnRev(OUT_A);OnFwd(OUT_C); //右旋回
#define senkail SetPower(OUT_C+OUT_A,10);OnRev(OUT_C);OnFwd(OUT_A); //左旋回
#define TURN_TIME 400
task main()
{
SetPower(OUT_A+OUT_C,10);
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int Llm=0,time_max=0;
ClearTimer(0);//タイマーセット
while(FastTimer(0)<TURN_TIME)//ライトセンサー1の
{ //光度の最大値を探す(最大値をLlmと定義する)
senkair; //最大値を見つけたら
if(SENSOR_1>Llm) //旋回した分と少し戻って光源が
if(SENSOR_1>Llm) //右旋回した時間(time_maxと定義)+少し の時間左旋回して光源が
{ //ライトセンサー1と3の大体
Llm=SENSOR_1; //真ん中にくるようにする
Llm=SENSOR_1; //真ん中に着て止まる
time_max=FastTimer(0);
}
stoP;
}
senkail;
Wait(TURN_TIME+40-time_max);
stoP;
while(true)
{
if(SENSOR_3+SENSOR_1>Llm*2-60)//センサ1、3の光度がある数値(Llm×2−60)未満になったら
{ //光源を見失ったとして
senkair; //光度に比例した音を鳴らし
PlayTone(SENSOR_1*3,10); //右旋回しながら光源を探す
}
while(SENSOR_3+SENSOR_1>Llm*2-60)//センサ1、3の光度がある数値(Llm×2−60)より上のとき
{
if(SENSOR_1>SENSOR_3)//センサ1の光度のほうが大きいとき
{right;//左に曲がりつつ進む
if(SENSOR_1>SENSOR_3) //センサ1の光度のほうが大きいとき
{right; //右に曲がりつつ進む
}
else if(SENSOR_3>SENSOR_1)//センサ3の光度のほうが大きいとき
右に曲がりつつ進む
{left;
{left; //左に曲がりつつ進む
}
}
}
}