[[戻る>2005/A6]] *プログラムメモ [#d55d5fa5] -ロボコン #define line 47 #define turn_time 200 #define go_time 100 #define box_time 50 int move_time; int Mes; sub turn_left(){ OnFwd(OUT_C); OnRev(OUT_A); } sub turn_right(){ OnFwd(OUT_A); OnRev(OUT_C); } sub wall_go(){ } sub line_go(){ SetSensor(SENSOR_1,SENSOR_LIGHT);//left SetSensor(SENSOR_3,SENSOR_LIGHT);//right OnFwd(OUT_A+OUT_C); while(true){ if((SENSOR_1 < line) && (SENSOR_3 > line)){ OnFwd(OUT_C); Off(OUT_A); until(SENSOR_1 > line); } if((SENSOR_1 > line) && (SENSOR_3 < line)){ OnFwd(OUT_A); Off(OUT_C); until(SENSOR > line); } if((SENSOR_1 < line) && (SENSOR_3 < line)){ break; } else{ OnFwd(OUT_A+OUT_C); } } } sub line_back(){ SetSensor(SENSOR_1,SENSOR_LIGHT);//left SetSensor(SENSOR_3,SENSOR_LIGHT);//right OnRev(OUT_A+OUT_C); while(true){ if((SENSOR_1 < line) && (SENSOR_3 > line)){ OnRev(OUT_C); Off(OUT_A); until(SENSOR_1 > line); } if((SENSOR_1 > line) && (SENSOR_3 < line)){ OnRev(OUT_A); Off(OUT_C); until(SENSOR > line); } if((SENSOR_1 < line) && (SENSOR_3 < line)){ break; } else{ OnRev(OUT_A+OUT_C); } } sub GetMessage(){ while(true){ ClearMessage(); until (Message() != 0); if(Message() == 1)Mes=1;//toriawatta if(Message() == 2)Mes=2;//green dayo if(Message() == 3)Mes=3;//white dayo if(Message() == 4)Mes=4;//brack dayo } } sub bunbetu(){ repeat(3){ GetMessage(); if(Mes == 2){//green line_go(); turn_right(turn_time); OnFwd(OUT_A+OUT_C);Wait(go_time); SendMessage(5); Wait(500);//owattayo OnRev(OUT_A+OUT_C);Wait(go_time); turn_left(turn_time); line_back(); OnFwd(OUT_B);Wait(box_time); } else if(Mes == 3){//white line_go(); line_go(); turn_right(turn_time); OnFwd(OUT_A+OUT_C);Wait(go_time); SendMessage(5); Wait(500);//owwatayo OnRev(OUT_A+OUT_C);Wait(go_time); turn_left(turn_time); line_back(); line_back(); OnFwd(OUT_B);Wait(box_time); } else if(Mes == 4){//brack line_go(); line_go(); line_go(); turn_right(turn_time); OnFwd(OUT_A+OUT_C);Wait(go_time); SendMessage(5); Wait(500);//owattayo OnRev(OUT_A+OUT_C);Wait(go_time); turn_left(turn_time); line_back(); line_back(); line_back(); OnFwd(OUT_B);Wait(box_time); } } } task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); GetMessage(); if(Mes==1){ OnFwd(OUT_A+OUT_C) until((SENSOR_1 < line) && (SENSOR_3 < line)); turn_right(); until((SENSOR_1 > line) && (SENSOR_3 > line)); repeat(3){ line_go(); } turn_right(); Wait(turn_time); OnFwd(OUT_A+OUT_C); until(SENSOR_1 < line); turn_left(); Wait(turn_time); line_go(); } bunbetu(); line_back();//go home turn_left(turn_time); SendMessage(6); Wait(500);//totte GetMessage(); if(Mes==1){ OnFwd(OUT_A+OUT_C) until((SENSOR_1 < line) && (SENSOR_3 < line)); turn_right(); until((SENSOR_1 > line) && (SENSOR_3 > line)); line_go(); turn_right(); Wait(turn_time); OnFwd(OUT_A+OUT_C); until(SENSOR_1 < line); turn_left(); Wait(turn_time); line_go(); } bunbetu(); line_back();//go home turn_left(turn_time); } - スケーターズワルツ #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define Ra 880 #define Si 988 #define Doo 1047 #define Ree 1175 task play_music() { while(true){ PlayTone(Mi,120);Wait(120); PlayTone(So,80);Wait(80); PlayTone(Ra,40); Wait(45); PlayTone(Ra,240);Wait(245); PlayTone(Fa,120);Wait(120); PlayTone(Ra,80);Wait(80); PlayTone(Si,40);Wait(45); PlayTone(Si,240);Wait(245); PlayTone(Ree,120);Wait(120); PlayTone(Doo,80);Wait(80); PlayTone(Mi,40);Wait(45); PlayTone(So,120);Wait(120); PlayTone(Fa,80);Wait(80); PlayTone(Mi,40);Wait(45); PlayTone(Mi,120);Wait(120); PlayTone(Re,120);Wait(120); PlayTone(Do,150);Wait(160); PlayTone(So,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Doo,15);Wait(20); PlayTone(So,40);Wait(40); PlayTone(Si,30);Wait(40); PlayTone(Si,40);Wait(40); PlayTone(So,40);Wait(40); PlayTone(Si,30);Wait(40); PlayTone(Si,40);Wait(40); PlayTone(So,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Ree,15);Wait(20); PlayTone(So,40);Wait(40); PlayTone(Doo,30);Wait(40); PlayTone(Doo,40);Wait(40); PlayTone(So,40);Wait(40); PlayTone(Doo,30);Wait(40); PlayTone(Doo,40);Wait(40); } } task main(){ start play_music ; } - 一番明るい方を向くプログラム int LIGHT_=0; //一番明るいところの値を入れる int TIME_LIGHT=0;//一番明るいところまで回るまでの時間 int RUN_TIME=450;//一回転する時間 task main(){ SetSensor(SENSOR_1, SENSOR_LIGHT); ClearTimer(0); while (FastTimer(0) <= RUN_TIME) { //一回転するまで繰り返す if ( SENSOR_1 > LIGHT_ ) { //もし今まで記録した値より明るかったら LIGHT_ = SENSOR_1 ; //関数にその明るさを記録 TIME_LIGHT = FastTimer(0); //関数にそのときまでの時間を記録 } OnFwd(OUT_A); OnRev(OUT_C); } ClearTimer(0); while (FastTimer(0) <= TIME_LIGHT) {// 一番明るかった場所まで回る OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A+OUT_C) } - プログラム修正 int LIGHT_MAX=0; //一番明るいところの値を入れる int TIME_LIGHT=0;//一番明るいところまで回るまで int RUN_TIME;//一回転する時間 int cnt=0;//カウンター task main(){ SetSensor(SENSOR_2, SENSOR_LIGHT); ClearTimer(0); OnFwd(OUT_A); OnRev(OUT_C); repeat(50){ if(SENSOR_2 > LIGHT_MAX){ LIGHT_MAX = SENSOR_2;//一番明るいところの値が入る TIME_LIGHT = cnt;//一番明るいところまでかかった時間が入る } cnt++; Wait(5); } OnFwd(OUT_C); OnRev(OUT_A); RUN_TIME = 250-(TIME_LIGHT-1)*5;//逆回転する時間 Wait(RUN_TIME); Off(OUT_A+OUT_C); }