找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3219|回复: 1
打印 上一主题 下一主题
收起左侧

STM32F103AGV小车程序

[复制链接]
跳转到指定楼层
楼主
ID:477393 发表于 2019-6-22 22:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:同时实现自主循迹、自动避障、红外遥控、舵机运动

单片机源程序如下:
  1. //连接方式 :请参考interface.h文件
  2. #include "stm32f10x.h"
  3. #include "interface.h"
  4. #include "LCD1602.h"
  5. #include "IRCtrol.h"
  6. #include "motor.h"
  7. #include "uart.h"
  8. #include "redvoid.h"
  9. #include "UltrasonicCtrol.h"

  10. //全局变量定义
  11. unsigned int speed_count=0;//占空比计数器 50次一周期
  12. char front_left_speed_duty=SPEED_DUTY;
  13. char front_right_speed_duty=SPEED_DUTY;
  14. char behind_left_speed_duty=SPEED_DUTY;
  15. char behind_right_speed_duty=SPEED_DUTY;

  16. unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期
  17. unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
  18. unsigned char tick_200ms = 0;//刷新显示

  19. char ctrl_comm = COMM_STOP;//控制指令
  20. char ctrl_comm_last = COMM_STOP;//上一次的指令
  21. unsigned char continue_time=0;
  22. unsigned char bt_rec_flag=0;//蓝牙控制标志位

  23. unsigned char duoji_count=0;
  24. unsigned char zhuanjiao = 11;

  25. void DuojiMid()
  26. {
  27.         zhuanjiao = 12;
  28.         Delayms(300);
  29. }

  30. void DuojiRight()
  31. {
  32.         zhuanjiao = 14;
  33.         Delayms(300);
  34. }

  35. void DuojiLeft()
  36. {
  37.         zhuanjiao = 10;
  38.         Delayms(300);
  39. }

  40. //循迹,通过判断三个光电对管的状态来控制小车运动
  41. void SearchRun(void)
  42. {
  43.         //三路都检测到
  44.         if(SEARCH_M_IO == BLACK_AREA && SEARCH_L_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA)
  45.         {
  46.                 ctrl_comm = COMM_UP;
  47.                 DuojiLeft();
  48.                 return;
  49.         }
  50.         if(VOID_R_IO == BARRIER_Y && VOID_L_IO == BARRIER_Y)
  51.         {
  52.                 VoidRun();
  53.         }
  54.         else if(VOID_L_IO == BARRIER_Y)
  55.         {
  56.                 VoidRun();
  57.         }
  58.         else if(VOID_R_IO == BARRIER_Y)
  59.         {
  60.                 VoidRun();
  61.         }
  62.         else if(SEARCH_R_IO == BLACK_AREA)//右
  63.         {
  64.                 ctrl_comm = COMM_RIGHT;
  65.         }
  66.         else if(SEARCH_L_IO == BLACK_AREA)//左
  67.         {
  68.                 ctrl_comm = COMM_LEFT;
  69.         }
  70.         else if(SEARCH_M_IO == BLACK_AREA)//中
  71.         {
  72.                 ctrl_comm = COMM_UP;
  73.         }
  74.         if(SEARCH_M_IO == WHITE_AREA && SEARCH_L_IO == WHITE_AREA && SEARCH_R_IO == WHITE_AREA)
  75.                 {
  76.                         continue_time--;//200ms 无接收指令就停车
  77.                         if(continue_time == 0)
  78.                         {
  79.                                 continue_time = 1;
  80.                                 CarStop();
  81.                         }
  82.                 if(ir_rec_flag == 1)//接收到红外信号
  83.                         {
  84.                                 ir_rec_flag = 0;
  85.                                 switch(ctrl_comm)
  86.                                 {
  87.                                         case COMM_UP:    CarGo();break;
  88.                                         case COMM_DOWN:  CarBack();break;
  89.                                         case COMM_LEFT:  CarLeft();break;
  90.                                         case COMM_RIGHT: CarRight();break;
  91.                                         case COMM_STOP:  CarStop();DuojiRight();break;
  92.                                         default : break;
  93.                                 }
  94.                                 LCD1602WriteCommand(ctrl_comm);
  95.                         }
  96.         }
  97. }


  98. int main(void)
  99. {
  100.         delay_init();
  101.         GPIOCLKInit();
  102.         UserLEDInit();
  103.         LCD1602Init();
  104.         IRCtrolInit();
  105.         TIM2_Init();
  106.         MotorInit();
  107.         ServoInit();
  108.        
  109.         RedRayInit();
  110.         //USART3Conf(9600);

  111. while(1)
  112. {         
  113.                          if(tick_5ms >= 5)
  114.                 {
  115.                         tick_5ms = 0;
  116.                         tick_200ms++;
  117.                         if(tick_200ms >= 40)
  118.                         {
  119.                                 tick_200ms = 0;
  120.                                 LEDToggle(LED_PIN);
  121.                         }
  122. //                        continue_time--;//200ms 无接收指令就停车
  123. //                        if(continue_time == 0)
  124. //                        {
  125. //                                continue_time = 1;
  126. //                                CarStop();
  127. //                        }
  128.                         //do something
  129.                         SearchRun();
  130.                         if(ctrl_comm_last != ctrl_comm)//指令发生变化
  131.                         {
  132.                                 ctrl_comm_last = ctrl_comm;
  133.                                 switch(ctrl_comm)
  134.                                 {
  135.                                         case COMM_UP:    CarGo();break;
  136.                                         case COMM_DOWN:  CarBack();break;
  137.                                         case COMM_LEFT:  CarLeft();break;
  138.                                         case COMM_RIGHT: CarRight();break;
  139.                                         case COMM_STOP:  CarStop();break;
  140.                                         default : break;
  141.                                 }
  142.                                 Delayms(10);//防抖
  143.                                 LCD1602WriteCommand(ctrl_comm);
  144.                         }
  145.                 }
  146.                
  147. }
  148. }
复制代码

所有资料51hei提供下载:
移动机器人.zip (5.58 MB, 下载次数: 73)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:588621 发表于 2019-8-2 18:42 来自手机 | 只看该作者
谢谢,有没有连接图呐
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表