ドローンを搭載した機体の交差点認識を行い、ゴール地点でSTOPするプログレラム
Dependencies: mbed AQM0802 CRotaryEncoder TB6612FNG_Ver1
Revision 18:c13fb85f1250, committed 2019-12-20
- Comitter:
- 1817106
- Date:
- Fri Dec 20 01:10:55 2019 +0000
- Parent:
- 17:8d0dc3258cc4
- Commit message:
- test;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 8d0dc3258cc4 -r c13fb85f1250 main.cpp --- a/main.cpp Thu Dec 19 00:07:50 2019 +0000 +++ b/main.cpp Fri Dec 20 01:10:55 2019 +0000 @@ -55,6 +55,11 @@ AnalogIn s6(A2); AnalogIn s7(A1); AnalogIn s8(A0); + +/////ドローン定義 +//DigitalOut drone(D3); + +//int Drone = drone; /////////////////////////////////////// Serial PC(USBTX,USBRX); CRotaryEncoder encoder_a(D1,D0); //モータAのエンコーダ @@ -67,7 +72,7 @@ //使用変数の定義 int Sw_Ptn; int Old_Sw_Ptn; -double S1_Data,S2_Data,S3_Data,S4_Data,S5_Data,S6_Data,S7_Data,S8_Data; +double S2_Data,S3_Data,S4_Data,S5_Data,S6_Data,S7_Data,S8_Data; double All_Sensor_Data; //ラインセンサ総データ量 double Sensor_Diff[2]={0,0}; //ラインセンサ偏差 double Sensor_P =0.0f; //ラインセンサP(比例成分)制御量 @@ -101,8 +106,10 @@ int SG_Flag=0; int SG_Cnt=0; int Cross_Flag=0; + + void sensor_analog_read(){ - S1_Data=0; + S2_Data=s2.read(); S3_Data=s3.read(); S4_Data=s4.read(); @@ -178,11 +185,11 @@ //各種マーカの検知 Old_Marker_Pass_Flag=Marker_Pass_Flag;//過去のフラグを退避 - if(Sensor_Digital&0x41){ //マーカセンサ検知時 + if(Sensor_Digital&0x01){ //マーカセンサ検知時 Marker_Pass_Flag=1; //マーカ通過中フラグをON - if((Sensor_Digital&0x40)/*&&(Sensor_Digital&0x20)&&(Sensor_Digital&0x04)&&(Sensor_Digital&0x02)*/)Cross_Flag2=1; // + if(Cross_Flag==1); // if(Sensor_Digital&0x01)SG_Flag=1; //スタートゴールセンサの検知 - if((Cross_Flag2==1)&&(SG_Flag==1))Cross_Flag=1;//交差点通過中。何もしない + if((Cross_Flag==1)&&(SG_Flag==1))Cross_Flag=1;//交差点通過中。何もしない }else Marker_Pass_Flag=0;//マーカ通過終了 //マーカ通過後、マーカ種類判別 @@ -194,13 +201,10 @@ }else if((SG_Flag==1)&&(SG_Cnt==1)){//ゴールスタートマーカの時⇒2回目 Machine_Status|=STOP; //機体停止状態へ SG_Cnt=0; - }else if(Cross_Flag2==1){//コーナマーカの時 - //地区大会では何もしない } }else{//マーカではなく、誤検知だった場合。 //何もしない } - Cross_Flag2=0; SG_Flag=0; Cross_Flag=0; Marker_Run_Distance=0;//マーカ通過距離情報リセット @@ -286,9 +290,10 @@ motor_a=-(TURN_POWER); //右旋回 motor_b=-(-TURN_POWER); }else if(Sensor_Cnt>=CROSS_JUDGE){//交差点通過中 + Cross_Flag=1; motor_a=-0.3;//交差点なので控えめの速度で直進 motor_b=-0.3; - //Cross_Flag=1; + } else{ motor_a=-Motor_A_Pwm; @@ -302,7 +307,7 @@ }else{ motor_a=0; motor_b=0; - //Cross_Flag=0; + Cross_Flag=0; } } } @@ -326,6 +331,8 @@ lcd.print(" "); lcd.locate(0,0); lcd.print("STOP"); + + // Drone=0; wait(5); Gray=DEFAULT_GRAY; Machine_Speed=DEFAULT_SPEED; @@ -354,15 +361,18 @@ lcd.locate(0,0); lcd.print("GO!!"); wait(2); + + // Drone=1; Stop_Distance=0; Machine_Status&=0x7F;//ストップ状態解除 }else{//機体走行中であったとき //各種フラグのクリア - Cross_Flag2=0; + Cross_Flag=0; SG_Flag=0; Cross_Flag=0; Marker_Run_Distance=0;//マーカ通過距離情報リセット - + + // Drone=0; Machine_Status |= STOP;//機体停止状態にする。 lcd.locate(0,0); lcd.print(" ");