[[2006b/MemberOnly/進行状況A]]
*課題 光を追いかけるロボット [#p2854809]
**プログラム1(失敗) [#q850c631] 
  task main()
 #define T_Time 450            
  
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   int light=0;
   int time;
   ClearTimer(0); 
   while(FastTimer(0)<T_Time) 
 { 
   OnFwd(OUT_C);OnRev(OUT_A); 
   if(light<SENSOR_1) 
 {         
   light=SENSOR_1;        
   ClearTimer(1);                   }}                             
    time=FastTimer(1);          
   OnFwd(OUT_A);OnRev(OUT_C);
   Wait(time);Off(OUT_A+OUT_C);Wait(100);
   while(true)
   {OnFwd(OUT_A+OUT_C); 
    if(SENSOR_3<SENSOR_1){OnRev(OUT_A);OnFwd(OUT_C);} 
    if(SENSOR_1<SENSOR_3){OnRev(OUT_C);OnFwd(OUT_A);}}}

 最も明るいところを見つけるプログラムを組むのは、意外と簡単にできました。しかしその後、光に向かっていくプログラムを組むのに苦戦しました。プログラム1は、一応光りに向かっていくのですが、ものすごく小刻みに(左右に)動きながら近ずくので、遅いうえに五月蝿いというデメリットばかりのプログラムになりました。
**プログラム2(成功) [#ief5d3a4]
   task main()
 #define T_Time 450            
  
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   int light=0;
   int time;
   ClearTimer(0); 
   while(FastTimer(0)<T_Time) 
 { 
   OnFwd(OUT_C);OnRev(OUT_A); 
   if(light<SENSOR_1) 
 {         
   light=SENSOR_1;        
   ClearTimer(1);                   }}                             
    time=FastTimer(1);          
   OnFwd(OUT_A);OnRev(OUT_C);
   Wait(time);Off(OUT_A+OUT_C);Wait(100);OnFwd(OUT_A+OUT_C);Wait(100);
   light=0;
   ClearTimer(1); 
   ClearTimer(0);                   }

 見てわかる通りプログラム2は、プログラム1を少しいじくっただけです。このプログラムは、最も明るい方位を見つけたら、その方位へ少し進みその後、また最も明るい方位を見つけて進むを繰り返すプログラムです。デメリットは、少し時間がかかることですが、ライトの位置を変えても向かっていくことができるというメリットがあります(まさしく急がば回れ)。                      

**工夫した点 [#d7994098]
 プログラム1ではセンサーを2つ、プログラム2では1使っています。数を減らした方が上手くいったので、少し複雑な気分です。
**コメントをどうぞ! [#jd996a43]
#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS