找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2220|回复: 2
收起左侧

STM32红外黑线循迹代码

[复制链接]
ID:504534 发表于 2019-4-4 00:46 | 显示全部楼层 |阅读模式
循迹部分代码

单片机源程序如下:
  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. //全局变量定义
  9. unsigned int speed_count=0;//占空比计数器 50次一周期
  10. char front_left_speed_duty=SPEED_DUTY;
  11. char front_right_speed_duty=SPEED_DUTY;
  12. char behind_left_speed_duty=SPEED_DUTY;
  13. char behind_right_speed_duty=SPEED_DUTY;

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

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

  21. //循迹,通过判断三个光电对管的状态来控制小车运动
  22. void SearchRun(void)
  23. {
  24.         //三路都检测到
  25.         if(SEARCH_M_IO == BLACK_AREA && SEARCH_L_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA)
  26.         {
  27.                 ctrl_comm = COMM_UP;
  28.                 return;
  29.         }
  30.        
  31.         if(SEARCH_R_IO == BLACK_AREA)//右
  32.         {
  33.                 ctrl_comm = COMM_RIGHT;
  34.         }
  35.         else if(SEARCH_L_IO == BLACK_AREA)//左
  36.         {
  37.                 ctrl_comm = COMM_LEFT;
  38.         }
  39.         else if(SEARCH_M_IO == BLACK_AREA)//中
  40.         {
  41.                 ctrl_comm = COMM_UP;
  42.         }
  43. }


  44. int main(void)
  45. {
  46.         delay_init();
  47.         GPIOCLKInit();
  48.         UserLEDInit();
  49.         LCD1602Init();
  50.         //IRCtrolInit();
  51.         TIM2_Init();
  52.         MotorInit();
  53.         ServoInit();
  54.        
  55.         RedRayInit();
  56.         //USART3Conf(9600);

  57. while(1)
  58. {         
  59.                          if(tick_5ms >= 5)
  60.                 {
  61.                         tick_5ms = 0;
  62.                         tick_200ms++;
  63.                         if(tick_200ms >= 40)
  64.                         {
  65.                                 tick_200ms = 0;
  66.                                 LEDToggle(LED_PIN);
  67.                         }
  68. //                        continue_time--;//200ms 无接收指令就停车
  69. //                        if(continue_time == 0)
  70. //                        {
  71. //                                continue_time = 1;
  72. //                                CarStop();
  73. //                        }
  74.                         //do something
  75.                         SearchRun();
  76.                         if(ctrl_comm_last != ctrl_comm)//指令发生变化
  77.                         {
  78.                                 ctrl_comm_last = ctrl_comm;
  79.                                 switch(ctrl_comm)
  80.                                 {
  81.                                         case COMM_UP:    CarGo();break;
  82.                                         case COMM_DOWN:  CarBack();break;
  83.                                         case COMM_LEFT:  CarLeft();break;
  84.                                         case COMM_RIGHT: CarRight();break;
  85.                                         case COMM_STOP:  CarStop();break;
  86.                                         default : break;
  87.                                 }
  88.                                 Delayms(10);//防抖
  89.                                 LCD1602WriteCommand(ctrl_comm);
  90.                         }
  91.                 }
  92.                
  93. }
  94. }
复制代码

所有资料51hei提供下载:
红外黑线循迹.7z (180.68 KB, 下载次数: 13)


回复

使用道具 举报

ID:1 发表于 2019-4-5 03:39 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:505599 发表于 2019-4-11 10:25 | 显示全部楼层
3路循迹的吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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