[[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); //左に曲がりつつ進む #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 TURN_TIME 400 task main() { 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) //右旋回した時間(time_maxと定義)+少し の時間左旋回して光源が { //ライトセンサー1と3の大体 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; //右に曲がりつつ進む } else if(SENSOR_3>SENSOR_1)//センサ3の光度のほうが大きいとき {left; //左に曲がりつつ進む } } } }