找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5641|回复: 1
收起左侧

STM32循迹+蓝牙小车制作(附源码)

[复制链接]
ID:393605 发表于 2018-12-12 22:32 | 显示全部楼层 |阅读模式
在做小车之前,首先应该明确需要的器件,其次划分功能模块,一个模块一个模块的来,在完成一个模块之后添加另一个能保证最终小车的稳定功能实现。有两种思路:一,以实现功能为主,不考虑后期要加什么东西,实现以后再做优化。二,先将项目整体需要做的东西全部过一遍,再一步步做出成品。我是第一种,在搭建的过程中也遇到了一些问题,如:我把电机弄好以后,咦,驱动放哪?我把驱动固定在板上以后,呀,洞洞板这面有可能使驱动引脚导电,等各种问题。所以具体采用哪种思路还需要根据实际情况来看。功能模块

从一个流水灯开始,依次加入电机、PWM、红外、蓝牙,完成最终调试。

实物图

1.jpg


代码需要注意的问题:电机与驱动的接线及代码中GPIO口的初始化要能对应上,具体怎么接具体测试。

  1. #include "sys.h"
  2. #include "usart.h"        
  3. #include "delay.h"        
  4. #include "led.h"
  5. #include "key.h"
  6. #include "motor.h"
  7. #include "detector.h"
  8. #include "usart2.h"
  9. #include "hc05.h"
  10. #include "string.h"
  11. void xunji(void);
  12. int main(void)
  13. {        
  14.         u8 sendbuf[20];         
  15.         u8 reclen=0;  
  16.         
  17.         Stm32_Clock_Init(9);
  18.         delay_init(72);
  19.         
  20.         LED_Init();
  21.         KEY_Init();
  22.         PWM_Init(899,0);//pwm频率=72000/(899+1)=80Khz ??why先不管
  23.         detectorInit();
  24.         
  25.         uart_init(72,9600);         //串口1初始化为9600
  26.         HC05_Init();        //初始化ATK-HC05模块  
  27.         
  28.         while(1){
  29.                
  30.                 if(USART2_RX_STA&0X8000)                        //接收到一次数据了
  31.                 {               
  32.                          reclen=USART2_RX_STA&0X7FFF;        //得到数据长度
  33.                           USART2_RX_BUF[reclen]=0;                 //加入结束符
  34.                         
  35.                         if(strcmp((const char*)USART2_RX_BUF,"X")==0){
  36.                                 xunji();
  37.                         }
  38.                         if(strcmp((const char*)USART2_RX_BUF,"F")==0)
  39.                         {        LED1=~LED1;
  40.                                 carStraight(450,899);
  41.                                 
  42.                         }
  43.                         if(strcmp((const char*)USART2_RX_BUF,"B")==0)
  44.                         {        LED1=~LED1;
  45.                                 carBack(500,899);
  46.                         }
  47.                         if(strcmp((const char*)USART2_RX_BUF,"L")==0)
  48.                         {        
  49.                                 LED1=~LED1;        //打开LED1
  50.                                 carLeft(300,899);
  51.                         }
  52.                         if(strcmp((const char*)USART2_RX_BUF,"R")==0)
  53.                         {        LED1=~LED1;
  54.                                 carRight(400,300);
  55.                         }
  56.                         if(strcmp((const char*)USART2_RX_BUF,"S")==0)
  57.                         {        LED1=~LED1;
  58.                                 carStop();
  59.                         }
  60.                          USART2_RX_STA=0;         
  61.                 }                                                                                                                                                                        
  62.         }
  63. }
  64. /*循迹代码
  65. */
  66. void xunji(){
  67.         
  68.         u8 sendbuf[20];         
  69.         u8 reclen=0;  
  70.         while(1){
  71.                
  72.                 if(USART2_RX_STA&0X8000)                        //接收到一次数据了
  73.                         {               
  74.                                 reclen=USART2_RX_STA&0X7FFF;        //得到数据长度
  75.                                 USART2_RX_BUF[reclen]=0;                 //加入结束符
  76.                                 
  77.                                 if(strcmp((const char*)USART2_RX_BUF,"O")==0){
  78.                                         //xunji();
  79.                                         break;
  80.                                 }
  81.                                 USART2_RX_STA=0;         
  82.                 }         
  83.                 //如果左边检测到黑线
  84.                 //有黑线是高电平
  85.                 if(LEFT_DETECTOR == 1 && RIGHT_DETECTOR == 0){
  86.                         carLeft(100,899);
  87.                         delay_ms(500);
  88.                         //右边检测到黑线
  89.                 }else if(RIGHT_DETECTOR == 1 && LEFT_DETECTOR == 0){
  90.                         carRight(600,300);
  91.                         delay_ms(500);
  92.                 }else{
  93.                         carStraight(400,600);
  94.                 }
  95.         }        
  96. }
复制代码

全部资料51hei下载地址:
BlueTooth-and-detector-Car-master.zip (180.29 KB, 下载次数: 83)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:445480 发表于 2018-12-13 11:05 | 显示全部楼层
这个可以有
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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