コード例 #1
0
ファイル: kit07.c プロジェクト: sigmax6/sigmav
void main(void)
{
	vInitialize();
	myInit();
	
	while(!pushsw_get())
	{
		if(cnt1<100)
			led_out(0x1);
		else if(cnt1<200)
			led_out(0x2);
		else	cnt1 = 0;
	}
	cnt1 = 0;
	while(startbar_get())
	{
		if(cnt1<50)
			led_out(0x1);
		else if(cnt1<100)
			led_out(0x2);
		else	cnt1 = 0;
	}
	
	led_out(0);
	start();
	pattern = 10;	
	while(1)
	{

		switch(pattern)
		{

			case 10:	//直线
					if(check_crossline()){	pattern = 30;break;	}
					if(check_blackArea()){	pattern = 40;break;	}
					
					straight_run();				//直线前行,弯道检测,盲区检测
					break;
			
			case 20:	//弯道
						switch(turn_direction)
						{
							case LEFT:
									handle(-1*midDegree_st4);
									left_turn();
									break;
							case RIGHT:
									handle(midDegree_st4);
									right_turn();
									break;
							default:break;
						}
						break;


			case 30:	//直角

						rightAngle();						
						break;


			case 40:	//盲区
						switch(blackArea_direction)
						{
							case LEFT:
									left_blackArea();
									break;
							case RIGHT:
									right_blackArea();
									break;
							default:break;									
						}
						break;

			default:break;

		}//end switch

	}//end while
	
}
コード例 #2
0
ファイル: motor_test.c プロジェクト: flair2005/Omni_on_Camera
void main( void )
{
    int             i, j;
    unsigned int    u;
    char            c;

    /* マイコン機能の初期化 */
    init();                             /* 初期化                       */
    initI2CEeprom( &P6DDR, &P6DR, 0x90, 6, 5);  /* EEP-ROM初期設定      */
    init_sci1( 0x00, 79 );              /* SCI1初期化                   */
    set_ccr( 0x00 );                    /* 全体割り込み許可             */

    /* マイコンカーの状態初期化 */
    speed_r( 0, 0 );
    speed_f( 0, 0 );
    servoPwmOut( 0 );

    while( 1 ) {
        switch( pattern ) {
        case 0:
            /* メニュー */
            printf( "\n\n" );
            printf( "Motor Drive PCB TypeS Test Program Ver1.00\n" );
            printf( "\n" );
            printf( "1 : LEDのテスト\n" );
            printf( "2 : スイッチのテスト\n" );
            printf( "3 : CN8の入力テスト\n" );
            printf( "4 : ブザーのテスト\n" );
            printf( "5 : エンコーダのテスト\n" );
            printf( "6 : EEP-ROMのテスト\n" );
            printf( "7 : ボリュームのテスト\n" );
            printf( "8 : アナログセンサ基板のテスト\n" );
            printf( "9 : モータのテスト\n" );
            printf( "\n" );
            printf( "1-9の数字を入力してください " );
            pattern = 1;
            break;

        case 1:
            if( get_sci(&c) ) {
                if( c >= '1' && c <= '9' ) {
                    printf( "%c\n\n" , c );
                    cnt1 = 0;
                    pattern = (c - 0x30) * 10 + 1;
                }
            }
            break;

        case 11:
            /* LEDのテスト */
            printf( "現在LED2〜5を順番に点灯中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 12;
            break;

        case 12:
            led_out( 1 << (cnt1 / 500) );
            if( cnt1 >= 2000 ) cnt1 = 0;
            if( get_sci(&c) == 1 ) {
                led_out( 0 );
                pattern = 0;
            }
            break;

        case 21:
            /* スイッチのテスト */
            printf( "現在スイッチの値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 22;
            break;

        case 22:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "ディップSW(SW3)の値 : %02x ", dipsw_get2() );
                printf( "プッシュSW(SW2)の値 : %1x\r", pushsw_get() );
            }
            break;

        case 31:
            /* CN8の入力テスト */
            printf( "CN8に入力されている値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 32;
            break;

        case 32:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "CN8の入力値 : %1x\r", cn8_get() );
            }
            break;

        case 41:
            /* ブザーのテスト */
            printf( "ブザーをテストします。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 42;
            break;

        case 42:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                beep_out( 0 );
                break;
            }
            if( cnt1 <= 1000 ) {
                beep_out( 1 );
            } else if( cnt1 <= 2000 ) {
                beep_out( 0 );
            } else {
                cnt1 = 0;
            }
            break;

        case 51:
            /* エンコーダのテスト */
            printf( "エンコーダの入力パルス数を表示します。" );
            printf( "終わったらどれかキーを押してください。\n" );
            lEncoderTotal = 0;
            pattern = 52;
            break;

        case 52:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "エンコーダのパルス値 : %8ld\r", lEncoderTotal );
            }
            break;

        case 61:
            /* EEP-ROMのテスト */
            printf( "EEP-ROMが正常に書き込めるかチェックします。" );
            printf( "チェック中はキー入力を受け付けません。" );
            printf( "チェックしますか?(Y or N) " );
            pattern = 62;
            break;

        case 62:
            if( get_sci(&c) == 1 ) {
                switch( c ) {
                case 'Y':
                case 'y':
                    printf( "y\n" );
                    pattern = 63;
                    break;
                case 'N':
                case 'n':
                    printf( "n\n" );
                    pattern = 0;
                    break;
                }
            }
            break;

        case 63:
            for( u=0; u<0x8000 ; u++ ) {
                if( u % 0x80 == 0 ) {
                    printf( "%3ld%%チェック完了...\r",
                                        (long)u * 100 / 0x8000 );
                }
                writeI2CEeprom( u, 0xaa );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0xaa ) {
                    break;
                }

                writeI2CEeprom( u, 0x55 );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0x55 ) {
                    break;
                }

                writeI2CEeprom( u, 0x00 );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0x00 ) {
                    break;
                }
            }
            printf( "\n" );
            if( u == 0x8000 ) {
                printf( "EEP-ROMは正常でした。\n" );
           } else {
                printf( "EEP-ROMに異常がありました。" );
                printf( "半田不良など確認してください。\n" );
            }
            pattern = 64;
            break;

        case 64:
            printf( "どれかキーを押してください。" );
            while( get_sci(&c) );
            pattern = 65;
            break;

        case 65:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            break;

        case 71:
            /* ボリュームのテスト */
            printf( "ボリューム電圧を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 72;
            break;

        case 72:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                i =  AD_DRB >> 6;
                j = (long)500 * i / 1023;
                printf( "ボリュームの電圧 : %4d (%01d.%02dV)\r",
                                                i, j/100, j%100 );
            }
            break;

        case 81:
            /* アナログセンサ基板のテスト */
            printf( "アナログセンサ基板の値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 82;
            break;

        case 82:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "Left=%4d , Right=%4d , "
                        "Digital=%1x , Center=%1d , Bar=%1d\r",
                            AD_DRD>>6, AD_DRC>>6, sensor_inp(),
                            center_inp(), startbar_get() );
            }
            break;

        case 91:
            /* モータのテスト */
            printf( "モータのテストをします。\n" );
            printf( "1 : 左後ろモータ\n" );
            printf( "2 : 右後ろモータ\n" );
            printf( "3 : サーボモータ\n" );
            printf( "4 : 左前モータ\n" );
            printf( "5 : 右前モータ\n" );
            printf( "0 : 終了\n" );
            printf( "\n" );
            printf( "0-5の数字を入力してください " );
            pattern = 92;
            break;

        case 92:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    pattern = 0;
                    break;
                } else if( c >= '1' && c <= '5' ) {
                    printf( "%c\n\n" , c );
                    cnt1 = 0;
                    pattern = (c - 0x31) * 10 + 101;
                }
            }
            break;

        case 101:
            printf( "左後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 102;
            break;

        case 102:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_r( 0, 0 );
                motor_mode_r( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 50, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( -50, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 50, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( -50, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 111:
            printf( "右後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 112;
            break;

        case 112:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_r( 0, 0 );
                motor_mode_r( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, 50 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, -50 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, 50 );
                    motor_mode_r( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, -50 );
                    motor_mode_r( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 121:
            printf( "サーボモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 122;
            break;

        case 122:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                servoPwmOut( 0 );
                motor_mode_s( BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( 50 );
                    motor_mode_s( BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( -50 );
                    motor_mode_s( BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( 50 );
                    motor_mode_s( FREE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( -50 );
                    motor_mode_s( FREE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 131:
            printf( "左前モータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 132;
            break;

        case 132:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_f( 0, 0 );
                motor_mode_f( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 50, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( -50, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 50, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( -50, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 141:
            printf( "右後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 142;
            break;

        case 142:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_f( 0, 0 );
                motor_mode_f( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, 50 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, -50 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, 50 );
                    motor_mode_f( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, -50 );
                    motor_mode_f( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        default:
            break;
        }