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 }
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; }