智能车制作

标题: STM32小车避障程序代码 [打印本页]

作者: demon    时间: 2012-3-8 20:51
标题: STM32小车避障程序代码
  1. /*
  2. u16 LeftDistance, RightDistance;
  3. ili9320_DisplayStringLine(Line12, " Measure Distance ",Blue,Green);
  4. AODistance = Measure_Start();
  5. if((AODistance > 20) && (car_state == 0 )) //距离障碍大于25cm
  6. {
  7. car_state = 1; //为1表示小车直行
  8. Send_Motor_Data[0] = 0x08; //小车直行
  9. Send_Motor_Data[1] = AO_Speed;
  10. Transmit_Data(0xFB);
  11. }
  12. if(AODistance <= 20 ) //距离障碍小于等于25cm
  13. {
  14. car_state = 0; //为0表示小车即将进入非直线状态
  15. Send_Motor_Data[0] = 0x10; //停车
  16. Transmit_Data(0xFB);
  17. Steer_Corner(90, 0); //舵机左转到90度
  18. Delay_ms(1000);
  19. LeftDistance = Measure_Start(); //测量左方距离
  20. Steer_Corner(90, 1); //舵机右转到90度
  21. Delay_ms(1000);
  22. RightDistance = Measure_Start(); //测量右方距离
  23. Delay_ms(1000);
  24. if(LeftDistance > 40 )
  25. {
  26. Send_Motor_Data[0] = 0x41;
  27. Send_Motor_Data[1] = 0x5A; //左转90度
  28. Transmit_Data(0xFB);
  29. Delay_ms(500);
  30. Delay_ms(1000); //等待小车转好弯
  31. Send_Motor_Data[0] = 0x08; //小车直行
  32. Send_Motor_Data[1] = AO_Speed;
  33. Transmit_Data(0xFB);
  34. while(Measure_Start() < 40)
  35. {
  36. Steer_Corner(0, 1);
  37. Delay_ms(700);
  38. if(Measure_Start() < 20) break;
  39. Steer_Corner(90, 1);
  40. Delay_ms(700);
  41. }
  42. if(Measure_Start() < 20) //没有路可走
  43. {
  44. LeftNoWay = 1; //左方没有路可走
  45. Send_Motor_Data[0] = 0x41; //小车左转180度
  46. Send_Motor_Data[1] = 0xB4;
  47. Transmit_Data(0xFB);
  48. Steer_Corner(90, 0); //舵机左转90度
  49. Delay_ms(1000);
  50. Delay_ms(1000);
  51. }
  52. if(Measure_Start() >= 40) //找到了路可以过去
  53. {
  54. Steer_Corner(0, 1);
  55. Delay_ms(500); //等待一段时间直至间距可容小车通过
  56. Send_Motor_Data[0] = 0x61; //右转90度
  57. Send_Motor_Data[1] = 0x5A;
  58. Transmit_Data(0xFB);
  59. Delay_ms(1000);
  60. Delay_ms(500);
  61. }
  62. }
  63. if(LeftDistance <= 40)
  64. {
  65. LeftNoWay = 1; //小车左方没有路
  66. Send_Motor_Data[0] = 0x61; //小车右转90度
  67. Send_Motor_Data[1] = 0x5A;
  68. Transmit_Data(0xFB);
  69. Steer_Corner(90, 0); //舵机左转90度
  70. Delay_ms(500);
  71. Delay_ms(1000);
  72. }
  73. if((RightDistance > 40) && (LeftNoWay == 1)) //小车向右运动
  74. {
  75. Send_Motor_Data[0] = 0x08; //小车直行
  76. Send_Motor_Data[1] = AO_Speed;
  77. Transmit_Data(0xFB);
  78. while(Measure_Start() < 40)
  79. {
  80. Steer_Corner(0, 1);
  81. Delay_ms(700);
  82. if(Measure_Start() < 20) break;
  83. Steer_Corner(90, 0);
  84. Delay_ms(700);
  85. }
  86. if(Measure_Start() < 20 ) //没有路可走 此时也说明这是一个没有间隙的障碍,不可过去,停车
  87. {
  88. Send_Motor_Data[0] = 0x10; //停车
  89. Transmit_Data(0xFB);
  90. TIM_Cmd(TIM2, DISABLE); //关闭定时器
  91. return; //返回主函数
  92. }
  93. if(Measure_Start() >= 40) //找到了路可以过去
  94. {
  95. Steer_Corner(0, 1); //舵机归位
  96. Delay_ms(500); //等待一段时间直至间距可容小车通过
  97. Send_Motor_Data[0] = 0x41; //左转90度
  98. Send_Motor_Data[1] = 0x5A;
  99. Transmit_Data(0xFB);
  100. Delay_ms(500);
  101. Delay_ms(1000);
  102. }
  103. }
  104. if((RightDistance <= 40) && (LeftNoWay == 1) ) //无路可走
  105. {
  106. Send_Motor_Data[0] = 0x10; //停车
  107. Transmit_Data(0xFB);
  108. TIM_Cmd(TIM2, DISABLE); //关闭定时器
  109. return; //返回主函数
  110. }
  111. } */
复制代码


作者: qjh690623    时间: 2012-9-9 21:59
可以用使stm32参加飞思卡尔比赛?
作者: 雨念    时间: 2012-10-28 13:31
多谢楼主分享!
作者: 淡淡    时间: 2014-10-6 18:17
能不能再完整点




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2