void main() { init_clk(); led_init(); Delay_ms(2000); //越过传感器不稳定状态 while(1) { led_out(0x55); Delay_ms(1000); led_out(0x00); work_data(); led_out(humdh); Delay_ms(1000);//等待下次采样 led_out(humdl); Delay_ms(1000); led_out(temph); Delay_ms(1000); led_out(templ); Delay_ms(1000); } }
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) { t0_init(); ei(); PEIE=1; di(); ei(); TRISB=0x00; PORTB=0x00; PORTC|=(1<<led_ERR); prog_drv(); led_cnt=prog*8; // while (1) { if(bit_100Hz) { bit_100Hz=0; // PORTC^=0x0f; // PORTB^=0b01100000; in_read(); step_contr(); mdvr_drv(); but_drv(); but_an(); } if(bit_10Hz) { bit_10Hz=0; //out_out(); led_out(); err_drv(); prog_drv(); // TRISC=0; // if(bVR) PORTB^=(1<<NET); // PORTC^=0xff; } if(bit_1Hz) { bit_1Hz=0; di(); // PORTB^=0xff; /* if(prog==p1) PORTB^=(1<<PP1); else if(prog==p2) PORTB^=(1<<PP2); else if(prog==p3) PORTB^=(1<<PP3); */ ei(); } } }
//=============================================== //=============================================== //=============================================== //=============================================== void main(void) { t0_init(); ei(); PEIE=1; di(); ei(); TRISB=0x00; PORTB=0x00; PORTC|=(1<<led_ERR); sci_init(); while (1) { if(bRXIN) { bRXIN=0; UART_IN(); } if(bit_100Hz) { bit_100Hz=0; in_read(); step_contr(); mdvr_drv(); but_drv(); but_an(); } if(bit_10Hz) { bit_10Hz=0; // out_out(); led_out(); err_drv(); prog_drv(); // if(prog==p1) OUT(3,CMND,eeprom_read(DELAY1),eeprom_read(DELAY2)/*3,3*/,0,0,0); // else if(prog==p2) OUT(3,CMND,eeprom_read(DELAY3),eeprom_read(DELAY4),0,0,0); if(prog==p3) { if(!sub_ind)adress=DELAY1; else adress=DELAY2; } else if(prog==p4) { if(!sub_ind)adress=DELAY3; else adress=DELAY4; } else if(prog==p1) { if(!sub_ind)adress=DELAY5; else adress=DELAY6; } else if(prog==p2) { if(!sub_ind)adress=DELAY7; else adress=DELAY8; } OUT(3,CMND,/*prog*/eeprom_read(adress),sub_ind+1,0,0,0); } if(bit_1Hz) { bit_1Hz=0; } } }
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; }
//=============================================== //=============================================== //=============================================== //=============================================== void main(void) { t0_init(); ei(); PEIE=1; di(); ei(); TRISB=0x00; PORTB=0x00; PORTC|=(1<<led_ERR); sci_init(); while (1) { if(bRXIN) { bRXIN=0; UART_IN(); } if(bit_100Hz) { bit_100Hz=0; in_read(); step_contr(); mdvr_drv(); but_drv(); but_an(); } if(bit_10Hz) { bit_10Hz=0; // out_out(); led_out(); err_drv(); prog_drv(); if(prog==p1) OUT(3,CMND,eeprom_read(DELAY1),eeprom_read(DELAY2),0,0,0); else if(prog==p1) OUT(3,CMND,eeprom_read(DELAY3),eeprom_read(DELAY4),0,0,0); } if(bit_1Hz) { bit_1Hz=0; } } }
void system_fsm_mode(void) { din = pev_pio_in(PEV_BDN); don = 0; switch (sysmode_e) { case SYS_STP: if (INI_SW == (din & INI_SW)) { // init switch on pev_pio_out(PEV_BDN, don); // reset relays pev_inverter_start_pwm(PEV_BDN, XAXIS); // drive inv's on pev_inverter_start_pwm(PEV_BDN, YAXIS); sysmode_e = SYS_INI; } if (INI_SW == (din & INI_SW) && RUN_SW == (din & RUN_SW)) { // avoid direct init err = err | FWE_LED; sysmode_e = SYS_ERR; // firmware init err } break; case SYS_INI: system_fsm_err(); // check for errors pev_pio_out(PEV_BDN, don); // switch relays if (err != 0) { // error detected pev_inverter_stop_pwm(PEV_BDN, XAXIS); // error mode change pev_inverter_stop_pwm(PEV_BDN, YAXIS); sysmode_e = SYS_ERR; } if (INI_SW != (din & INI_SW)) { // ini switch off system_fsm_reset(); // reset firmware pev_inverter_stop_pwm(PEV_BDN, XAXIS); // revert to stp mode pev_inverter_stop_pwm(PEV_BDN, YAXIS); sysmode_e = SYS_STP; } if (RUN_SW == (din & RUN_SW)) { // run switch on sysmode_e = SYS_RUN; } break; case SYS_RUN: system_fsm_err(); // check for errors pev_pio_out(PEV_BDN, don); // switch relays if (err != 0) { // error detected pev_inverter_stop_pwm(PEV_BDN, XAXIS); // error mode change pev_inverter_stop_pwm(PEV_BDN, YAXIS); sysmode_e = SYS_ERR; } if (OIL_SW == (din & OIL_SW)) { pev_pio_set_bit(PEV_BDN, OIL_DO); } // oil pump on else { pev_pio_clr_bit(PEV_BDN, OIL_DO); } // oil pump off if (RUN_SW != (din & RUN_SW)) { sysmode_e = SYS_INI; } // firmware reset break; case SYS_ERR: pev_pio_out(PEV_BDN, err); // system error LED if (RUN_SW != (din & RUN_SW) && INI_SW != (din & INI_SW)) // hardware reset { system_fsm_reset(); err = 0; sysmode_e = SYS_STP; // firmware reset don = don | RST_DO; pev_pio_out(PEV_BDN, don); // reset relay on } break; } led_out(sysmode_e); // system mode LED }