線を沿って行くロボットで指定されたコースで指令を完了する
Referenceのロボットの通りに作った。 基本であるため説明は省略する。
光の反射、また光の明るさによって、影響を受け安いのが実際のところ発見された そこで、光量の影響を避けるためにセンサーのあたりに影ができるようにした。
#define DO 523 #define RE 587 #define MI 659 #define PA 698 #define SOL 784 #define THRESHOLD 55 #define SPD_H 50 #define SPD_L 25 #define OnRL(spdR,spdL) OnFwd(OUT_B,spdR);OnFwd(OUT_C,spdL); #define GOFWD OnRL(SPD_H,SPD_H); #define L1 OnRL(SPD_L,-SPD_L); #define L0 OnRL(SPD_L,0); #define R0 OnRL(0,SPD_L); #define R1 OnRL(-SPD_L,SPD_L); #define STEP 1 #define nMAX 500 #define short_BRK Off(OUT_BC);Wait(1000); #define CRS_T 200 #define CRS_LINE OnRL(SPD_L,SPD_L);Wait(CRS_T);short_BRK; void CRSway(int Count) // program for crossway { PlayTone(SOL,1); short_BRK; R1; Wait(0.5*STEP*nMAX); if(Count==1) //turn left {PlayTone(DO,1); OnFwd(OUT_B,50); OnRev(OUT_C,20); Wait(500); Off(OUT_BC);} else if(Count==2) //turn right {PlayTone(RE,1); OnFwd(OUT_BC,30); Wait(300); OnFwd(OUT_C,50); OnRev(OUT_B,50); Wait(300); Off(OUT_BC);} else if(Count==3) //turn left {PlayTone(MI,1); OnFwd(OUT_B,50); OnRev(OUT_C,20); Wait(500); Off(OUT_BC);} else if(Count==4) // go front {PlayTone(PA,1); OnFwd(OUT_BC,50); Wait(800); Off(OUT_BC);} else if(Count==5) {PlayTone(SOL,1); OnFwd(OUT_BC,50); Wait(800); Off(OUT_BC);} } task main() { int CrossCount=0; SetSensorLight(S3); int nOnline=0; while(true){ while(nOnline<nMAX){ if(SENSOR_3<THRESHOLD-15) {L1; nOnline=nOnline+2;} else{ if(SENSOR_3<THRESHOLD-5) {L0; nOnline++;} else if(SENSOR_3<THRESHOLD+5) {GOFWD;} else if(SENSOR_3<THRESHOLD+15) {R0;} else{R1;} nOnline=0;} Wait(STEP); } CrossCount++; CRSway(CrossCount); nOnline=0; } }
交差点判断のreferenceがあまりにも優秀であったため、交差点で直進するロボットで直線の部分を構造体に変わり、交差点に入ったらCrossCountで何回目か確認した後、CRSwayという交差点命令構造体に送り、何回かの変数により決められいた動作をする。だけで解決した。
もちろん速度、長さ、距離、時間などによって変化する値は全部やってみながら調節した。
また、何回目の交差点かによって、違う音が動作前になり、動作をわかりやすくした。