課題3 左側 : 光を追いかけるロボット

改良前(07/03)のプログラム

作成日: 2006/07/03
作成者: Nori , ちぃ
====================

#define TURN 320     //1回転にかかる時間を定義
#define Do 523     //音の周波数を定義
#define Re 587
#define Mi 659
#define Fa 698
#define So 784
#define Ra 880

int i=0;     //整数型変数iを宣言し0を代入

task music()     //かえるの歌を流すタスク
{
 while(true)
 {
  PlayTone(Do,15); Wait(20);
  PlayTone(Re,15); Wait(20);
  PlayTone(Mi,15); Wait(20);
  PlayTone(Fa,15); Wait(20);
  PlayTone(Mi,15); Wait(20);
  PlayTone(Re,15); Wait(20);
  PlayTone(Do,15); Wait(40);

  PlayTone(Mi,15); Wait(20);
  PlayTone(Fa,15); Wait(20);
  PlayTone(So,15); Wait(20);
  PlayTone(Ra,15); Wait(20);
  PlayTone(So,15); Wait(20);
  PlayTone(Fa,15); Wait(20);
  PlayTone(Mi,15); Wait(40);

  PlayTone(Do,30); Wait(40);
  PlayTone(Do,30); Wait(40);
  PlayTone(Do,30); Wait(40);
  PlayTone(Do,30); Wait(40);

  PlayTone(Do,7); Wait(10);
  PlayTone(Do,7); Wait(10);
  PlayTone(Re,7); Wait(10);
  PlayTone(Re,7); Wait(10);
  PlayTone(Mi,7); Wait(10);
  PlayTone(Mi,7); Wait(10);
  PlayTone(Fa,7);  Wait(10);
  PlayTone(Fa,7);  Wait(10);
  PlayTone(Mi,15); Wait(20);
  PlayTone(Re,15); Wait(20);
  PlayTone(Do,15); Wait(20);
  Wait(20);
 }
}

task main()
{
 int lmax=0,lmin=0,tmax=0;     //整数型変数lmax,lmin,tmax を宣言し0を代入

 SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1が光センサであることを宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3が光センサであることを宣言

 Wait(100);     //すぐに動き出さないように待機
 while(true)     //以下無限ループ
 {
  if(i==0){start music;i=1;}     //iが0ならかえるの歌を再生開始しiに1を代入
  lmax=SENSOR_1;     //lmaxにセンサ1の値を代入
  lmin=SENSOR_1;
  OnFwd(OUT_A);OnRev(OUT_C);     //回転開始
  ClearTimer(0);     //タイマ0をクリア
  while(FastTimer(0)<=TURN)     //1回転する
  {
   if(lmax<SENSOR_1)
   {                       //センサ1の値がlmaxより大きいなら
    lmax=SENSOR_1;         //lmaxにセンサ1の値を代入し,
    tmax=FastTimer(0);     //tmaxにタイマ0の値を代入
   }
   if(lmin>SENSOR_1)
   {                       //センサ1の値がlminより小さいなら
    lmin=SENSOR_1;         //lminにセンサ1の値を代入
   }
  }
  Off(OUT_A+OUT_C);     //回転停止
  Wait(30);
  OnFwd(OUT_C);OnRev(OUT_A);
  Wait(TURN-tmax);     //(TURN-tmax)*10^-2 秒間逆回転
  Off(OUT_A+OUT_C);
  Wait(30);

  if(lmax>=(lmin+20))     //lmaxがlminより20以上大きければ光の追跡を開始
  {
   stop music;i=0;     //かえるの歌の再生を停止し、iに0を代入
   while((SENSOR_1>=(lmax-15))||(SENSOR_3>=(lmax-15)))     //センサ1,センサ3の値がlmax-15以上の間光を追いかける
   {
    if(abs(SENSOR_1-SENSOR_3)<=5)     //センサ1とセンサ3の値の差が5以内ならば直進
    {OnFwd(OUT_A+OUT_C);}
    if(SENSOR_1<(SENSOR_3-5))     //センサ1の値がセンサ3の値-5より小さければ左へ
    {Off(OUT_C);OnFwd(OUT_A);}
    if(SENSOR_1>(SENSOR_3+5))     //センサ1の値がセンサ3の値+5より大きければ右へ
    {Off(OUT_A);OnFwd(OUT_C);}
   }
   Off(OUT_A+OUT_C);
  }
 }
}
作成日: 2006/07/03
作成者: Nori , Utsumi
====================

#define TURN 320     //1回転にかかる時間を定義

task sound()     //音を鳴らすタスク
{
 while(true)
 {PlayTone((10*SENSOR_1),10);Wait(10);}
}

task main()
{
 int lmax=0,lmin=0,tmax=0;     //整数型変数lmax,lmin,tmaxを宣言し0を代入

 SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1が光センサであることを宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3が光センサであることを宣言

 Wait(100);     //すぐに動き出さないように待機
 while(true)     //以下無限ループ
 {
  start sound;     //音を鳴らし始める
  lmax=SENSOR_1;     //lmaxにセンサ1の値を代入
  lmin=SENSOR_1;
  OnFwd(OUT_A);OnRev(OUT_C);     //回転開始
  ClearTimer(0);     //タイマ0をクリア
  while(FastTimer(0)<=TURN)     //1回転する
  {
   if(lmax<SENSOR_1)
   {                       //センサ1の値がlmaxより大きいなら
    lmax=SENSOR_1;         //lmaxにセンサ1の値を代入し,
    tmax=FastTimer(0);     //tmaxにタイマ0の値を代入
   }
   if(lmin>SENSOR_1)
   {                       //センサ1の値がlminより小さいなら
    lmin=SENSOR_1;         //lminにセンサ1の値を代入
   }
  }
  Off(OUT_A+OUT_C);     //回転停止
  stop sound;     //音を止める
  Wait(30);
  OnFwd(OUT_C);OnRev(OUT_A);
  Wait(TURN-tmax);     //(TURN-tmax)*10^-2 秒間逆回転
  Off(OUT_A+OUT_C);
  Wait(30);
  
  if(lmax>=(lmin+20))     //lmaxがlminより20以上大きければ光の追跡を開始
  {
   while((SENSOR_1>=(lmax-15))||(SENSOR_3>=(lmax-15)))     //センサ1,センサ3の値がlmax-15以上の間光を追いかける
   {
    if(abs(SENSOR_1-SENSOR_3)<=5)     //センサ1とセンサ3の値の差が5以内ならば直進
    {OnFwd(OUT_A+OUT_C);}
    if(SENSOR_1<(SENSOR_3-5))     //センサ1の値がセンサ3の値-5より小さければ左へ
    {Off(OUT_C);OnFwd(OUT_A);}
    if(SENSOR_1>(SENSOR_3+5))     //センサ1の値がセンサ3の値+5より大きければ右へ
    {Off(OUT_A);OnFwd(OUT_C);}
   }
   Off(OUT_A+OUT_C);
  }
 }
}

2006a/C4/課題3左 に戻る


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-07 (金) 18:57:32