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

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

  • 課題3-1 光源を見失ったらかえるの歌を流しながら光源を探す
作成日: 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);
  }
 }
}
  • 課題3-2 光源を見失ったら明るさに比例した周波数の音を出しながら光源を探す
作成日: 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