找回密码
 立即注册

QQ登录

只需一步,快速开始

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

bb-8机器人制作源码(stm32f103)

[复制链接]
ID:160860 发表于 2021-8-17 11:43 | 显示全部楼层 |阅读模式
  1. //   PA0,PA1, 对应四个引脚对应测速的四个角,TIME2
  2. //   PC4,PC5,电机A,   PWMA--PB6
  3. //   PC2,PC3,电机B    PWMB--PB7
  4. //   PB11--TX,  PB10--RX   蓝牙
  5. //   PB5             舵机
  6. /*
  7.      OLED接线定义:
  8.                                         VCC--3.3V/5V
  9.                                         GND--GND
  10.                                         SCL--PB8
  11.                                         SDA--PB9
  12. */

  13. #include "delay.h"
  14. #include "sys.h"
  15. #include "usart.h"
  16. #include "CeSu.h"       //测速文件
  17. #include "DianJi.h"     //电机文件
  18. #include "Duoji.h"      //舵机文件
  19. #include "LanYa.h"      //蓝牙文件
  20. #include "oled_iic.h"

  21. #define High_speed 90
  22. #define Low_speed 50
  23. #define DuoJi_JiaoDu_Init 85

  24. //extern int16_t LunSuDu[4];     //实际值
  25. //extern int16_t COUNT[4];       //脉冲计数

  26. extern u8 receive_data[10];
  27. extern u8 ChuLi_data[10];      //蓝牙命令

  28. char   Buf[128];       

  29. int v=Low_speed,v0=0;    //默认初始速度
  30. int angle=90;      //舵机初始角度
  31. //float i;           //测量电压

  32. //蓝牙命令处理
  33. void MingLing_ChuLi(u8 *MingLing)
  34. {
  35.        
  36.     if(MingLing[0]=='v')  //检测电压  
  37.                  {
  38.                         //        i=analogRead(sensor)*5;i=i/1024*3;            //analogRead(sensor),从指定的模拟引脚中读取值。

  39.                         MingLing[0]='t';
  40.                  }              
  41.          
  42.     else if(MingLing[0]=='h')   {v=High_speed;}//高速模式  
  43.    
  44.     else if(MingLing[0]=='l')   {v=Low_speed;}//中速模式
  45.                
  46.     else if(MingLing[0]=='1')
  47.                 {
  48.                         //v0=Low_speed;
  49. //                        DuoJi_KongZhi(110);          //舵机110°
  50.                         motor(v,v);
  51.                        
  52.     }
  53.                
  54.     else if(MingLing[0]=='2') {motor(v,-v);}  //左转
  55.                
  56.     else if(MingLing[0]=='3') {motor(-v,v);}  //右转
  57.                
  58.     else if(MingLing[0]=='4')
  59.                 {

  60. //                        DuoJi_KongZhi(70);          //舵机110°
  61.                         motor(-v,-v);
  62.                 }                       
  63.                
  64.     else if(MingLing[0]=='5')         //舵机角度增加
  65.           {
  66.                                                 if(angle<120)
  67.                                                 {
  68.                                             angle++;
  69.                                                         MingLing[0]='0';
  70.                                                 }
  71.                                                 else {
  72.                                                         angle=120;
  73.                                                 }
  74.                                             DuoJi_KongZhi(angle);
  75.                                             delay_ms(50);
  76.                                         }   
  77.                                        
  78.     else if(MingLing[0]=='6')        //舵机角度减少
  79.           {
  80.                                                 if(angle>60)
  81.                                                 {
  82.                                             angle--;
  83.                                                         MingLing[0]='0';
  84.                                                 }
  85.                                                 else {
  86.                                                         angle=60;
  87.                                                 }
  88.                                             DuoJi_KongZhi(angle);
  89.                                             delay_ms(50);
  90.                                         }                 
  91.                                        
  92.     else if(MingLing[0]=='7')   {DuoJi_KongZhi(DuoJi_JiaoDu_Init);}                                   //舵机回到90度
  93.                
  94.     else if(MingLing[0]=='8')   {motor(v-40,v);}                             
  95.                
  96.     else if(MingLing[0]=='9')   {motor(v,v-40);}
  97.                
  98.                 else if(MingLing[0]=='t')
  99.                 {
  100.                         Dj_A_FangXiang(3);
  101.                         Dj_B_FangXiang(3);
  102.                         TIM_SetCompare1(TIM4,0);
  103.                         TIM_SetCompare2(TIM4,0);
  104.                         DuoJi_KongZhi(DuoJi_JiaoDu_Init);
  105.                 }
  106.                
  107.    
  108. }


  109. int main(void)
  110. {       
  111.    
  112.         delay_init();                     //延时函数初始化          
  113.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  114.         uart_init(115200);             //串口初始化为115200
  115.         OLED_Init();                         //OLED屏幕初始化                  
  116.     MOTOR_Init();                  //电机PWM控制初始化
  117.           DianJi_PWM_Init();
  118.     Uart3_Init(9600);
  119.           TIM3_PWM_Init(200-1,7200-1);   //PWM分频
  120.     DuoJi_KongZhi(DuoJi_JiaoDu_Init);   //舵机90度;
  121.                  OLED_Clear();       
  122.          
  123.          TIM_SetCompare1(TIM4,0);
  124.          TIM_SetCompare2(TIM4,0);
  125.          
  126. //    TIM2_CAP_Init(0XFFFF,72-1);      //这里以1us频率捕获脉冲
  127. //           TIM4_Int_Init(1000,72);                  //不分频。T=10MS,采集单位时间轮速   

  128.        while(1)
  129.        {
  130.                                   //超声波测距
  131.                                  
  132.                                   //红外循迹
  133.                            
  134.                                         //接收蓝牙串口数据
  135.                                         MingLing_ChuLi(ChuLi_data);

  136.     //显示代码                               
  137.         sprintf(Buf,"Receive: %s",receive_data);       
  138.         OLED_ShowCH(0,0*2,(u8 *)&Buf);
  139.        
  140.         sprintf(Buf,"Data: %s",ChuLi_data);
  141.         OLED_ShowCH(0,1*2,(u8 *)&Buf);


  142.    }
  143.    
  144. }
复制代码

代码下载: bb-8_stm32源码.7z (201 KB, 下载次数: 7)
回复

使用道具 举报

ID:328014 发表于 2021-8-18 22:19 | 显示全部楼层
本帖最后由 51hei团团 于 2021-8-18 22:42 编辑

楼主你好 能分享一下原理图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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