亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機超聲波避障掉頭程序每次都是執行兩次,求大神解疑
[打印本頁]
作者:
天使之淚
時間:
2019-4-23 20:08
標題:
單片機超聲波避障掉頭程序每次都是執行兩次,求大神解疑
這個掉頭是在超聲波模塊檢測到障礙物距離在20----30厘米時,標志位置1,之后在執行程序里將標志位置0,但是每次都是掉頭兩次,本來掉一次頭就能轉180度了,但是兩次掉頭就變成還是面向障礙物。
讀取距離標志:
Read_Flag_ultra_Avg
,速度PID計算也在這里。
各位大神幫忙看一下,這個掉頭的程序:
if(Stop_Turn_Flag==1),在Stop_Turn_Flag=1時,
每次都是執行兩次,這是為什么啊?
單片機源程序如下:
s16 Read_Flag_ultra_Avg=0,Stop_Flag=0;
void TIM7_IRQHandler(void)
{
if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM7, TIM_IT_Update );
tim_motor_flag=1;
Cnt++;
Read_Flag_ultra_Avg++;
if(Cnt>=5)
{
Cnt=0;
Read_Flag_ultra_Avg=1;
}
LeftWheelSpeed= Motor_GetLeftEncResult();
LeftPIDResult = PID_LocPIDCalc(&PID_LeftWheel,(float)Left_Desired_Speed,(float)LeftWheelSpeed,1);
LeftPWMOut = LeftPIDResult;
LeftPWMOut = LeftPWMOut/5;
Motor_SetLeftPWM(LeftPWMOut);
RightWheelSpeed=Motor_GetRightEncResult();
RightPIDResult = PID_LocPIDCalc(&PID_RightWheel,(float)Right_Desired_Speed,(float)RightWheelSpeed,1);
RightPWMOut = RightPIDResult;
RightPWMOut = RightPWMOut/5;
Motor_SetRightPWM(RightPWMOut);
}
}
主程序判斷障礙物距離20cm-----30cm就將Stop_Turn_Flag置1
if (Read_Flag_ultra_Avg==1)
{
Read_Flag_ultra_Avg=0;
ultra_Avg=ultrasonic_d();
// printf("ultra_Avg=%.2f\r\n",ultra_Avg
if(ultra_Avg>=20&&ultra_Avg<=30)
{
// printf("ultra_Avg_COM=%.2f\r\n",ultra_Avg);
Stop_Flag=1;
Go_Flag=0;
Stop_Turn_Flag=1;
}
if (ultra_Avg<=20||ultra_Avg>=30)
{
Stop_Flag=0;
Go_Flag=1;
Stop_Turn_Flag=0;
}
}
子程序,如果 if(Stop_Turn_Flag==1)則掉頭,否則就執行繼續前行程序
if(Stop_Turn_Flag==1)
{
// Stop_Turn_Flag=0;
Right_Desired_Speed=0;
Left_Desired_Speed=0;
delay_ms(999);
delay_ms(999);
// delay_ms(999
Right_Desired_Speed=400;
Left_Desired_Speed=-400;
LED4 =!LED4;
delay_ms(599);
Go_Flag=1;
Stop_Turn_Flag=0;
// printf("Stop_Turn_Flag=%d\r\n",Stop_Turn_Flag);
// printf("Go_Flag=%d\r\n",Go_Flag
Read_Flag_ultra_Avg=1;
}
if(Go_Flag==1)
{
Stop_Flag=0;
Go_Flag=0;
Stop_Turn_Flag=0;
{
Actual_N = Extracting_BlackLIne() ;
Error_N = Actual_N - 58 ;
if(Error_N < -4)
{
Left_Desired_Speed = 300+ Error_N*1;
Right_Desired_Speed = 300- Error_N*1;
if(Right_Desired_Speed > 600) Right_Desired_Speed = 600 ;
if(Left_Desired_Speed < 0) Left_Desired_Speed = 0 ;
}
if(Error_N > 4)
{
Left_Desired_Speed = 300 + Error_N*1;
Right_Desired_Speed = 300 - Error_N*1;
if(Left_Desired_Speed > 600) Left_Desired_Speed = 600 ;
if(Right_Desired_Speed < 0) Right_Desired_Speed = 0 ;
}
else
{
Left_Desired_Speed = 300;
Right_Desired_Speed = 300;
}
}
復制代碼
作者:
善良仁
時間:
2019-4-23 21:11
超聲波,用引腳中斷去寫,但是這個的準確性不高。。
作者:
天使之淚
時間:
2019-4-23 22:21
善良仁 發表于 2019-4-23 21:11
超聲波,用引腳中斷去寫,但是這個的準確性不高。。
請問下是中斷的問題嗎?
作者:
善良仁
時間:
2019-4-28 17:40
天使之淚 發表于 2019-4-23 22:21
請問下是中斷的問題嗎?
不是,我的意思是,你可以試下用中斷。我感覺有可能和超聲波模塊有關。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1