switch文を用いたプログラム

プログラム内容

#define LB 42    // 閾値を42にするつもりで、LBと設定
task main(){
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_2,SENSOR_TOUCH);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   int pt = 0;
   while(1){
       if((SENSOR_1 >= LB) && (SENSOR_3 >= LB)){
           pt = 1;        // センサーがどちらも白と判断している場合モード1に移行
       }else if((SENSOR_1 < LB) && (SENSOR_3 >= LB)){
           pt = 2;        // センサーの左側が黒と判断されている場合モード2に移行
       }else if((SENSOR_1 >= LB) && (SENSOR_3 < LB)){
           pt = 3;        // センサーの右側が黒と判断されている場合モード3に移行
       }else if((SENSOR_1 < LB) && (SENSOR_3 < LB)){
           pt = 4;        // センサーがどちらも黒と判断している場合モード4に移行
       }
       if(SENSOR_2 == 1){
           pt = 5;       // タッチセンサーが押された場合モード5に移行
       }
       switch(pt){
           case 0:
           case 1:        // モード1
               OnFwd(OUT_A+OUT_C);
               break;
           case 2:        // モード2
               OnFwd(OUT_C);
               OnRev(OUT_A);
               break;
           case 3:        // モード3
               OnFwd(OUT_A);
               OnRev(OUT_C);
               break;
           case 4:        // モード4
               OnFwd(OUT_A);
               OnRev(OUT_C);
               break;
           case 5:        // モード5
               OnFwd(OUT_A);
               OnRev(OUT_C);
               Wait(50);
               OnFwd(OUT_A+OUT_C);
               Wait(175);
               OnFwd(OUT_C);
               OnRev(OUT_A);
               Wait(50);
               OnFwd(OUT_A+OUT_C);
               Wait(175);
               OnFwd(OUT_C);
               OnRev(OUT_A);
               Wait(50);
               OnFwd(OUT_A+OUT_C);
               break;
           }
   }
}
       

プログラムの説明

  • こちらのプログラムは少し嗜好をこらしてみました。(ただ単にプログラムを書いた人が、昔やっていたC言語の名残でついこうなってしまったというのもありますが、これはこれでおもしろいからいいのかな、と思っています。だからプログラム設計者は全く後悔していませんよ、えぇそうですとも!!)
  • まず、define文で閾値を設定した後、各センサータイプの定義をそれぞれ行い、while(1)で無限ループを構築しています。
  • 次からが問題です。上のプログラム内でもコメントで書いてありますが、ptという関数にそれぞれの状態の時に各数値を代入します。この行動自体はごく普通なのですが。
  • その後、switch文を用いて各モードに移行するようになっています。
  • switch文というのは、switchの意味を考えて頂ければ分かるとおり、ある場所からスイッチが入ると入ったスイッチの番号のところに書いてある処理を行います。上のプログラムの場合、switch(pt)となっており、この『pt』がスイッチの働きをしています。プログラム内ではif文を用いて『pt』にある条件のときに各数値を代入しスイッチとしての役割を行っています。
  • 例えば光センサーがどちらも白と判断していた場合、if文では『pt』に『1』を代入しています。そして、switch文を見ると、『pt=1』の場合どちらのモーターも正転しており、光センサーがどちらも白判定をしている場合、『直進しろ』という命令を出しているわけです。
  • 今回は本当に昔の名残でついswitch文をつい使ってしまいましたが、見て頂ければ分かるとおりプログラムか無駄に長くなっています。今回のライントレースロボットに関して言えば、switch文を使わずともif文で十分に同じ処理が行えます。


    06.06.14更新

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-23 (金) 19:37:09