![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
玉田機体の調整
Dependencies: mbed AQM0802 CRotaryEncoder TB6612FNG
Diff: main.cpp
- Revision:
- 33:dfd006d3da79
- Parent:
- 32:ac1821d7715f
--- a/main.cpp Tue Nov 26 04:31:37 2019 +0000 +++ b/main.cpp Wed Nov 27 07:55:12 2019 +0000 @@ -33,6 +33,7 @@ AnalogIn s6(A3); AnalogIn s7(A2); AnalogIn s8(A0); + /////////////////////////////////////// CRotaryEncoder encoder_a(D1,D0); //モータAのエンコーダ CRotaryEncoder encoder_b(D11,D12); //モータBのエンコーダ @@ -69,8 +70,8 @@ ////↓左右タイヤの走行距離格納。1走目のコース記憶処理に使用する。マーカ通過ごとにリセット。 long long int Distance_memory_A=0, Distance_memory_B=0; -long int S_Kp=S_KP_LOW;////センサP成分 -long int S_Kd=S_KD_LOW;////センサD成分 +float S_Kp=S_KP_LOW;////センサP成分 +float S_Kd=S_KD_LOW;////センサD成分 long long int Marker_Run_Distance=0; long int Speed_A=0, Speed_B=0; //機体の現在速度を格納 @@ -108,7 +109,7 @@ void sensor_analog_read(){//ラインセンサの情報取得処理。 - if((Sensor_Digital&0x18)||(Cross_Flag==1)){//センサ中央検知もしくは交差点検知のとき +/* if((Sensor_Digital&0x18)||(Cross_Flag==1)){//センサ中央検知もしくは交差点検知のとき S1_Data=s1.read(); S2_Data=0; //交差点通過中は急旋回しないようにする。 S3_Data=s3.read()/S_K2; //交差点通過中は急カーブを控える @@ -126,7 +127,15 @@ S6_Data=s6.read(); S7_Data=s7.read(); S8_Data=s8.read(); - } + } */ + S1_Data=s1.read(); + S2_Data=s2.read(); + S3_Data=s3.read(); + S4_Data=s4.read(); + S5_Data=s5.read(); + S6_Data=s6.read(); + S7_Data=s7.read(); + S8_Data=s8.read(); } //8つのフォトリフレクタの入力を8ビットのデジタルパターンに変換。センサの状態をデジタルパターンで @@ -201,13 +210,13 @@ //左右タイヤの走行距離の差分を用いた曲率演算 /////左が右の一倍以上かつ左が右の1.2倍以下もしくは右は左の1倍以上かつ右が左の1.2倍以下の時 if((((course_data[Row][0])>=(course_data[Row][1]*1.0f))&&((course_data[Row][0])<(course_data[Row][1]*HIGH_SPEED_SECTION))) - || (((course_data[Row][0])>=(course_data[Row][1]*1.0f))&&((course_data[Row][0])<(course_data[Row][1]*HIGH_SPEED_SECTION)))){ + || (((course_data[Row][1])>=(course_data[Row][0]*1.0f))&&((course_data[Row][1])<(course_data[Row][0]*HIGH_SPEED_SECTION)))){ Imaginary_Speed=High_Speed;//高速とする。 }else if((((course_data[Row][0])>=(course_data[Row][1]*HIGH_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*MEDIUM_SPEED_SECTION))) - || (((course_data[Row][0])>=(course_data[Row][1]*HIGH_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*MEDIUM_SPEED_SECTION)))){ + || (((course_data[Row][1])>=(course_data[Row][0]*HIGH_SPEED_SECTION))&&((course_data[Row][1])<(course_data[Row][0]*MEDIUM_SPEED_SECTION)))){ Imaginary_Speed=Medium_Speed;//中カーブは中速とする。 }else if((((course_data[Row][0])>=(course_data[Row][1]*MEDIUM_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*LOW_SPEED_SECTION))) - || (((course_data[Row][0])>=(course_data[Row][1]*MEDIUM_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*LOW_SPEED_SECTION)))){ + || (((course_data[Row][1])>=(course_data[Row][0]*MEDIUM_SPEED_SECTION))&&((course_data[Row][1])<(course_data[Row][0]*LOW_SPEED_SECTION)))){ Imaginary_Speed=Low_Speed;//低速 } else{ @@ -261,9 +270,9 @@ void second_breaking(){ Recent_Distance=Next_Marker_Distance -(((Memory_Enc_Count_A*PULSE_TO_UM)+(Memory_Enc_Count_B*PULSE_TO_UM))/2); - + //現在速度がハイスピードで次のコースが急カーブであり、残り距離が---だったとき - if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed==Low_Speed) + if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed<Medium_Speed) &&(Recent_Distance<HL_BREAK_DISANCE)){ Target_Speed_A=Low_Speed; Target_Speed_B=Low_Speed; @@ -275,12 +284,12 @@ Target_Speed_B=Medium_Speed; } //現在速度が中間速度で次のコースが急カーブであり、残り距離が---だったとき - else if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed==Low_Speed) + else if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed<Medium_Speed) &&(Recent_Distance<ML_BREAK_DISANCE)){ Target_Speed_A=Low_Speed; Target_Speed_B=Low_Speed; - } -} + } +} /////LCD表示用関数。機体の現在状態を表示する。 void display_print(void){