[[2011a/A3/課題3右]] #define THRESHOLD 40 //線をたどるための光センサーの敷居 int lMax = 0; // int tMax = 0; int lMax = 0; //前向きのセンサーの一番高い値 int tMax = 0; //前向きのセンサーが一番高い値を見た時間 //黒い線をたどる関数 task kijun_ugoki() { while (true) { if (SENSOR_2 > THRESHOLD) { OnFwd(OUT_A); Float(OUT_C); } else { Float(OUT_A); OnFwd(OUT_C); } } } //ロボットをランプに向ける sub hikari_sagasu() { Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(230); OnRev(OUT_B); //アームを開ける Wait(230); lMax = 0; OnFwd(OUT_C); ClearTimer(0); while(FastTimer(0) < 450) while(FastTimer(0) < 450) //約360º 回す { OnRev(OUT_A); //一番明るい方向(ランプ向き)を探知して、時間を記録する if(SENSOR_3 > lMax) {lMax = SENSOR_3; tMax = FastTimer(0);} } OnFwd(OUT_A); OnRev(OUT_C); Wait((563 - tMax)); Wait((563 - tMax)); //ランプの方向より約90º 回す(けるための位置) } //ける動作。アームの側面で押しながら、左に曲がる sub keru() { Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(180); Off(OUT_B); OnRev(OUT_A+OUT_C); Wait(80); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(180); Off(OUT_B); OnFwd(OUT_A); OnRev(OUT_C); Wait(35); OnFwd(OUT_C); Wait(100); OnRev(OUT_A); Wait(200); Off(OUT_A+OUT_C); } task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); int i = 0; for(i = 0; i < 3; i++) { OnFwd(OUT_B); //アームを開ける Wait(180); Off(OUT_B); start kijun_ugoki; //線をたどる until(SENSOR_1 == 1); //テニスボールを押すまで stop kijun_ugoki; hikari_sagasu(); //ランプの位置からロボットの位置を変える keru(); //アームを使って、ボールをける } Off(OUT_A+OUT_C+OUT_B); }