void RightCourse::runShinkansen()

in str/apps/src/RightCourse.cpp [24:130]


void RightCourse::runShinkansen(){
    int16_t distance_shinkansen;    
    Shinkansen shinkansen;
    lineTracer.isLeftsideLine(false);
    while(1){
        distance_shinkansen = sonarSensor.getDistance();
        
        switch(shinkansenStatus){
            //新幹線が通るまで待つ処理
            case ShinkansenStatus::BEFORE_FIRST_SHINKANSEN:
                if(shinkansen.checkPass(distance_shinkansen)){
                    ev3_speaker_play_tone (NOTE_FS6, 100);
                    shinkansenStatus = ShinkansenStatus::FIRST_RAIL;
                }
                break;
            case ShinkansenStatus::FIRST_RAIL:
        		shinkansen.runForward(180.0, 500);
                shinkansenStatus = ShinkansenStatus::FIRST_LINE;
                ev3_speaker_play_tone (NOTE_FS6, 100);
                break;
            case ShinkansenStatus::FIRST_LINE:
        		shinkansen.firstPattern();
                ev3_speaker_play_tone (NOTE_FS6, 100);
                shinkansenStatus = ShinkansenStatus::SECOND_LINE;
                break;
            case ShinkansenStatus::SECOND_LINE:
        		shinkansen.secondPattern();
                ev3_speaker_play_tone (NOTE_FS6, 100);
                shinkansenStatus = ShinkansenStatus::BEFORE_SECOND_SHINKANSEN;
                break;
        	case ShinkansenStatus::BEFORE_SECOND_SHINKANSEN:
                if(shinkansen.checkPass(distance_shinkansen)){
                    ev3_speaker_play_tone (NOTE_FS6, 100);
                    shinkansenStatus = ShinkansenStatus::SECOND_RAIL;
                }
                break;
        	case ShinkansenStatus::SECOND_RAIL:
        		shinkansen.runForward(70.0, 500);
                shinkansenStatus = ShinkansenStatus::THIRD_LINE;
                ev3_speaker_play_tone (NOTE_FS6, 100);
                break;
        case ShinkansenStatus::THIRD_LINE:
        		shinkansen.firstPattern();
                ev3_speaker_play_tone (NOTE_FS6, 100);
                shinkansenStatus = ShinkansenStatus::FOURTH_LINE;
                break;
        	case ShinkansenStatus::FOURTH_LINE:
        		shinkansen.secondPattern();
                ev3_speaker_play_tone (NOTE_FS6, 100);
                shinkansenStatus = ShinkansenStatus::BEFORE_THIRD_SHINKANSEN;
                break;
        	case ShinkansenStatus::BEFORE_THIRD_SHINKANSEN:
                if(shinkansen.checkPass(distance_shinkansen)){
                    ev3_speaker_play_tone (NOTE_FS6, 100);
                    shinkansenStatus = ShinkansenStatus::PRIZE;
                }
                break;
        	case ShinkansenStatus::PRIZE:
        		basicWalker.backStraight(230);
        		basicWalker.spin(basicWalker.SPIN_RIGHT, 90);
            // 古いバージョン
        		//basicWalker.backStraight(10, 230);
        		//basicWalker.spin(10, basicWalker.SPIN_RIGHT, 90);
        		lifter.liftDown();
        		lifter.reset();
        		lifter.defaultSet(-10);
        		walker.reset();
        		walker.run(10, 0);
        		do{
        			distance_shinkansen = sonarSensor.getDistance();
        			tslp_tsk(4);
        		}while(distance_shinkansen > 10);
        		walker.run(0, 0);
        		basicWalker.goStraight(10, 100);
        		lifter.changeDefault(40);
        		lifter.defaultSet(40);
        		basicWalker.backStraight(400);
        		basicWalker.spin(basicWalker.SPIN_LEFT, 90);
            // 古いバージョン
        		//basicWalker.backStraight(10, 400);
        		//basicWalker.spin(10, basicWalker.SPIN_LEFT, 90);
        		basicWalker.goStraight(40, 800);
        		lifter.liftUp();
        		basicWalker.spin(basicWalker.SPIN_RIGHT, 90);
        		//basicWalker.spin(30, basicWalker.SPIN_RIGHT, 90);
				basicWalker.goStraight(10, 180);
        		lifter.changeDefault(-10);
        		basicWalker.backStraight(200);
        		//basicWalker.backStraight(10, 200);
        		shinkansen.spinBlack(30, basicWalker.SPIN_LEFT);
        		lifter.liftDown();
        		lifter.changeDefault(0);
        		shinkansenStatus = ShinkansenStatus::STOP;
        		break;
            case ShinkansenStatus::STOP:
                break;
            default:
                break;
        }

        if(ev3_button_is_pressed(BACK_BUTTON) || shinkansenStatus == ShinkansenStatus::STOP){
            walker.run(0, 0);
            break;
        }
        tslp_tsk(4); // 4msec周期起動      
    }
}