[[2014a/Member]]

目次

#contents

* 課題の説明 [#mffb653f]

詳しい説明は[[2014a/Mission1]]を参照

写真の入れかた例え:&ref(2014a/Member/mame/Mission1/sample2-small.jpg.30%);



* メンバー [#j0ee8e63]

mame

dai

* ロボット本体 [#g0b2bc6e]

** ライトセンサー [#jf97ef47]

** ドライブベース [#ta82ecff]

** アーム [#qa948bf2]

* 課題 [#ff560aa8]

* プログラム [#w9871f04]

** プログラムの概要 [#v140454d]

 #define SPEED_HIGH 40
 #define SPEED_MEDIUM 30
 #define SPEED_LOW 25
 #define SPEED_ZERO 0

 #define TURN_COUNT_MAX 300
 #define GO_COUNT_MAX 150
 #define Catch OnFwd(OUT_A,70);Wait(700);Off(OUT_A);
 #define shoot OnRev(OUT_B,100);Wait(1000);Off(OUT_B);
 #define Catch OnFwd(OUT_B,70);Wait(700);Off(OUT_B);
 #define go_forward OnFwd(OUT_AC,50);

 void On(int leftSpeed, int rightSpeed){
    if(leftSpeed > 0){
        OnFwd(OUT_C, leftSpeed);
    }else{
        OnRev(OUT_C, -leftSpeed);
    }
    if(rightSpeed > 0){
        OnFwd(OUT_A, rightSpeed);
    }else{
        OnRev(OUT_A, -rightSpeed);
    }
 }

 void GoForward(){
    On(SPEED_HIGH, SPEED_HIGH);
 }

 void GoLeft(){
    On(SPEED_ZERO, SPEED_MEDIUM);
 }

 void GoRight(){
    On(SPEED_MEDIUM, SPEED_ZERO);
 }

 void TurnLeft(){
    On(-SPEED_LOW, SPEED_LOW);
 }

 void TurnRight(){
    On(SPEED_LOW, -SPEED_LOW);
 }

 void Back(){
    On(-SPEED_HIGH, -SPEED_HIGH);
 }

 void BackLeft(){
    On(SPEED_ZERO, -SPEED_MEDIUM);
 }

 void BackRight(){
     On(-SPEED_MEDIUM, SPEED_ZERO);
 }

 bool Light(){
    if(SENSOR_1 < 28){
        return 0;
    }else if(SENSOR_1 < 35){
        return 1;
    }else if(SENSOR_1 < 40){
        return 2;
    }else if(SENSOR_1 < 45){
        return 3;
    }else{
        return 4;
    }
 }


 task main()
 {
    
     {SetSensorLowspeed(S4);
   
       go_forward;
   

     if(SensorUS(S4)  <=8) { Catch;Off(OUT_BC); }
   }


 {   int turnCount = 0;
    int goCount = 0;
    int nCorner = 0;
    SetSensorLight(S1);
    while(true){
        Wait(1);
        switch(Light()){
            case 0:
                TurnLeft();
                if(turnCount < 0 || goCount < 0){
                    turnCount = 0;
                    goCount = 0;
                }
                turnCount++;
                break;
            case 1:
                GoLeft();
                if(turnCount < 0 || goCount < 0){
                    turnCount = 0;
                    goCount = 0;
                }
                goCount++;
                break;
            case 2:
                GoForward();
                break;
            case 3:
                GoRight();
                if(turnCount > 0 || goCount > 0){
                    turnCount = 0;
                    goCount = 0;
                }
                goCount++;
                break;
            case 4:
                TurnRight();
                if(turnCount > 0 || goCount > 0){
                    turnCount = 0;
                    goCount = 0;
                }
                turnCount++;
                break;
                break;
              }
        if(turnCount > TURN_COUNT_MAX && goCount < GO_COUNT_MAX){
            PlayTone(440, 100);
            switch(nCorner++){
                case 0:
                case 1:
                case 3:
                    TurnRight();
                    Wait(turnCount * 3);
                    Off(OUT_AC);
                    Wait(100);
                    GoForward();
                    Wait(100);
                    break;
                case 4:OnRev(OUT_A,100);Wait(1000);Off(OUT_B);
               }
            turnCount = 0;
            goCount = 0;
      }
  }
    }
  }

** ライントレースのプログラム [#r829ca55]

** ボールをつかむプログラム [#gad1054c]

** ボールを放つ(シュートする)プログラム [#vc7dbfbf]

 task main() 
 {
   OnFwd(OUT_BC);
 }

** 反省と感想 [#a4021e1b]

難しかった。

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