找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32控制机械臂的智能小车源程序

[复制链接]
ID:845320 发表于 2021-4-16 21:37 | 显示全部楼层 |阅读模式
stm32机械臂智能小车,已经很成熟,欢迎下载
制作出来的实物图如下:
IMG20210405201430.jpg

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "usart1.h"
  3. #include "car_config.h"
  4. #include "pwm_output.h"
  5. #include "bsp_SysTick.h"
  6. #include "timers.h"
  7. #include "bizhang.h"
  8. #include "delay.h"
  9. //#include "LED.h"
  10. #include "ultrasonic.h"
  11. //#include "sys.h"
  12. #include "stm32f10x_gpio.h"
  13. /*
  14. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
  15. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  16. #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
  17. #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入
  18. */
  19. extern u8 receByte;
  20. //一次获取超声波测距数据,两次测距之间需要间隔一段时间,阻断回响信号
  21. //为了消除余震的影响,取五次数据的平均值进行加权滤波
  22. uint32_t Hcsr04GetLength(void )
  23. {
  24.         int i = 0;
  25.         u32 sum = 0;
  26.         u32 lengthTemp = 0;
  27.         while(i != 5)
  28.         {
  29.                 delay_us(20);
  30.                 i = i+1;
  31.                 lengthTemp = get_distance();
  32.                 sum = lengthTemp + sum ;
  33.         }
  34.         lengthTemp = sum/5.0;
  35.         return lengthTemp;
  36. }

  37. //#define LED PBout(10)
  38. #define LEDPORT  GPIOB
  39. #define LED1     GPIO_Pin_10  //定义LED1
  40. void ESP8266_Init()
  41. {
  42.         printf("AT\r\n");
  43.         delay_ms(300);
  44.         printf("AT+CWMODE=3\r\n");
  45.         delay_ms(300);
  46.        
  47.         printf("AT+CIPMUX=1\r\n");
  48.         delay_ms(300);
  49.         printf("AT+CIPSERVER=1,8080\r\n");
  50.         delay_ms(300);
  51. }

  52. //初始化LED
  53. void LED_Init(void)
  54. {
  55. GPIO_InitTypeDef GPIO_InitStructure;//构造结构体
  56. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能其所在时钟
  57. GPIO_InitStructure.GPIO_Pin = LED1;//定义IO端口
  58. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//定义IO端口输出模式
  59. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义IO端口输出速度
  60. GPIO_Init(LEDPORT, &GPIO_InitStructure);//写入其中
  61. }

  62. int main(void)
  63. {       
  64.         u16 sudu = 0;
  65.   u8 aflag = 0;
  66.         u8 aflag_1 = 0;
  67.                 u32 a=5;                                        //延时参数
  68.         u32 distance;
  69.         sudu = 250;//
  70.         SysTick_Init();                 /* 配置SysTick 为1us中断一次 */
  71.   Car_GPIO_Config();
  72.         USARTx_Config();         //USART1 config 9600 8-N-1
  73.         NVIC_Configuration();
  74.   Timer2Init();
  75.         TIM3_PWM_Init();
  76.         Speed_config(sudu);
  77. //        ESP8266_Init();
  78.         ultrasonic_init();        //初始化超声波测距模块
  79.         delay_init();                                //初始化系统延时
  80.                 for(a=5;a>0;a--)
  81.         {
  82.                 delay_ms(500);
  83.         }
  84.         LED_Init();
  85.         //distance = Hcsr04GetLength();
  86.         //printf("i love you");  

  87.         ESP8266_Init();

  88.        
  89.          GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
  90.         delay_ms(200);
  91.         GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
  92.          //GPIO_SetBits(LEDPORT,LED1);
  93.         while(1){                       
  94.                

  95.        

  96.                 if(aflag==0){
  97.                        
  98.                        
  99.                        
  100.                                         distance = Hcsr04GetLength();

  101.        
  102.                
  103.                                                 if(distance < 150)
  104.                 {
  105.                         hout();
  106.                 //        baojing_1();
  107.                         //LED1=0;
  108.                          GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
  109.                         delay_ms(200);
  110.                         //LED1=1;
  111.                         //distance = Hcsr04GetLength();                                                                                                //测量当前距离
  112.                         //printf("DISTANCE_av: %d mm\r\n", distance);         //        蓝牙串口打印当前距离
  113.                 }else{
  114.                                         GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
  115.                 }
  116.                        
  117.                        
  118.                         if(receByte==0x30){
  119.                                 tingz();       
  120.          printf("i love you");                                 
  121.                                 receByte = 0x40;       
  122.                         }else if(receByte==0x31){
  123.                                 qianj();               
  124.                                 receByte = 0x40;       
  125.                         }else if(receByte==0x32){
  126.                                 hout();               
  127.                                 receByte = 0x40;       
  128.                         }else if(receByte==0x33){
  129.                                 zuoz();               
  130.                                 receByte = 0x40;       
  131.                         }else if(receByte==0x34){
  132.                                 youz();               
  133.                                 receByte = 0x40;       
  134.                         }
  135.                         else if(receByte==0x35){
  136.                                 sudu = sudu+100;
  137.                                 if(sudu>=800){
  138.                                          sudu = 0;
  139.                                 }               
  140.                                 Speed_config(sudu);               
  141.         receByte = 0x40;                               
  142.                         }else if(receByte==0x36){
  143.                                 if(sudu>100){
  144.                                          sudu = sudu-100;
  145.                                 }        else if(sudu<=100){
  146.                                          sudu = 0;
  147.                                 }               
  148.                                 Speed_config(sudu);               
  149.         receByte = 0x40;                                       
  150.                         }




  151.                        
  152.                 }else{
  153.                        
  154.                        
  155.                        
  156.                                         distance = Hcsr04GetLength();

  157.         if(aflag_1==0){
  158.                
  159.                                                 if(distance > 200)
  160.                 {
  161.                         qianj();
  162.                         //aflag_1=1;
  163.                         //distance = Hcsr04GetLength();                                                                                                //测量当前距离
  164.                         //printf("DISTANCE_av: %d mm\r\n", distance);         //        蓝牙串口打印当前距离
  165.                 }else {
  166.                        
  167.                         aflag_1=1;       
  168.                         youz_1();
  169.                 delay_ms(700);
  170.                 //delay_ms(400);
  171.                         //delay_ms(300);
  172.                 tingz();       
  173.                         delay_ms(900);
  174.                                 youz_1();
  175.                 delay_ms(1000);
  176.                 //delay_ms(150);
  177.         delay_ms(100);
  178.                 //        delay_ms(300);
  179.                 tingz();               
  180.                         delay_ms(900);
  181.                         delay_ms(600);
  182.                         qianj();
  183.                

  184.                 }
  185.                        
  186.         }        else{
  187.        
  188.                                                                         if(distance > 200)
  189.                 {
  190.                         qianj();
  191.                         //aflag_1=1;
  192.                         //distance = Hcsr04GetLength();                                                                                                //测量当前距离
  193.                         //printf("DISTANCE_av: %d mm\r\n", distance);         //        蓝牙串口打印当前距离
  194.                 }else {
  195.                        
  196.                         aflag_1=0;       
  197.                         zuoz_1();
  198.                 delay_ms(1000);
  199.                 //        delay_ms(300);
  200.                         delay_ms(200);
  201.                         //delay_ms(1000);
  202.                 tingz();       
  203.                         delay_ms(1000);
  204.                         delay_ms(100);
  205.                         zuoz_1();
  206.                        
  207.                 //delay_ms(1000);
  208.                 delay_ms(800);
  209.                 delay_ms(200);
  210.                         //delay_ms(300);
  211.                 tingz();               
  212.                                         delay_ms(500);
  213.                         delay_ms(1000);       
  214.                         qianj();
  215.                

  216.                 }
  217.         }
  218.        
  219.        
  220.        
  221.        
  222.        
  223.        
  224.        
  225.        
  226.        
  227.                         /*
  228.                        
  229.                                 sudu = 280;
  230.                                 Speed_config(sudu);               
  231.                                   if((BiZhang_State(GPIOB,GPIO_Pin_0) == 0)&&(BiZhang_State(GPIOB,GPIO_Pin_1) == 0)){
  232.                                                 qianj();         
  233.                                  }else if((BiZhang_State(GPIOB,GPIO_Pin_0) == 1)&&(BiZhang_State(GPIOB,GPIO_Pin_1) == 1)){
  234.                                     tingz();
  235.                                  }else if((BiZhang_State(GPIOB,GPIO_Pin_0) == 1)&&(BiZhang_State(GPIOB,GPIO_Pin_1) == 0)){
  236.                                     zuoz();
  237.                                  }else if((BiZhang_State(GPIOB,GPIO_Pin_0) == 0)&&(BiZhang_State(GPIOB,GPIO_Pin_1) == 1)){
  238.                                     youz();
  239.                                  }       
  240. */                                 
  241.                 }
  242.                         if(receByte==0x37){
  243.                            aflag = 1;
  244.                         }
  245.                         if(receByte==0x38){
  246.                            aflag = 0;
  247.                         }
  248.                        
  249.         }       
  250. }
复制代码

所有资料51hei提供下载:
STM32程序_test.7z (185.38 KB, 下载次数: 34)

评分

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

查看全部评分

回复

使用道具 举报

ID:785125 发表于 2021-4-17 08:25 | 显示全部楼层
机械臂在哪里呢?没有看到
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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