找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5079|回复: 5
收起左侧

电子设计大赛电磁炮STM32源代码 两轴云台

[复制链接]
ID:467963 发表于 2019-8-28 00:21 | 显示全部楼层 |阅读模式
代码,电赛基本要求可以完成。

spi读取GY953数据,加上ANO6.5通讯协议,PWM_IN_OUT

单片机源程序如下:
  1. #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
  2. #include "bsp_usart.h"
  3. #include "delay.h"
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <math.h>
  7. #include "bsp_servo.h"
  8. #include "bsp_daba.h"
  9. #include "bsp_keyscan.h"
  10. #include "bsp_led.h"
  11. #include "oled.h"
  12. #include "bsp_keyscan.h"

  13. int16_t tim = 0;
  14. uint16_t volatile receivebuff[1024]={0};
  15. extern uint16_t aim_x,aim_y,flag;
  16. extern volatile uint16_t num;
  17. u8 key = 16,key1=16,single=1,select_yaw=0,select_d=0;
  18. u16 yaw=0,d=0,v0=5;
  19. u16 single_index=0;
  20. double pitch=0;
  21. u16 SINGLE[20]={30,35,40,45,50,55,60,65,70};//????
  22. u8 pattern_flag=1;
  23. u16 temp=0;
  24. extern int16_t aim_distances,aim_yaw;

  25. int main(void)
  26. {            
  27.         LED_GPIO_Config();                        
  28.         USART1_Config();
  29.         printf("串口成功!\n");
  30.         KeyBoard_Init();
  31.         OLED_Init();        
  32.         Servo_Init(20000, 72-1,1500,1500);//20ms周期  头:600-2350(10-170度)  底座:500-2500(0-180度),    1500对应90度asddadasdsada
  33.         printf("222");
  34.         
  35.         while(1)
  36.         {
  37.                 oled_show();
  38.                                 //printf("%d",d);
  39.                 //key=Read_KyeValue();
  40.                 //printf("%d",key);
  41. //                delay_ms(100);
  42.    
  43.                 if((Read_KyeValue()==14) && (pattern_flag==1))//??1???
  44.                 {
  45.                         delay_ms(10);
  46.                         //LED1_TOGGLE        ;
  47.                         printf("123");
  48.                         LED1_OFF;//chongdianjidianqi
  49.                         LED2_ON;//fangdainjidianqi
  50.                         delay_ms(Tchong);//???
  51.                         LED1_ON;
  52.                         LED2_ON;
  53.                         //delay_ms(200);
  54.                         //printf("443");
  55.                         LED1_ON;
  56.                         LED2_OFF;
  57.                         delay_ms(100);
  58.                         LED1_ON;
  59.                         LED2_ON;
  60.                         
  61.                         
  62.                 }
  63.                 if((Read_KyeValue()==10))//????
  64.                 {
  65.                         delay_ms(5);
  66.                         
  67.                         ++pattern_flag;
  68.                         while(Read_KyeValue()!=16);
  69.                         if(pattern_flag==4)
  70.                         {
  71.                                 pattern_flag=1;
  72.                         }
  73.                 }
  74.                 /************************************************/
  75.                 if((Read_KyeValue()==11) && (pattern_flag==2))        //??2,????
  76.                 {
  77.                         delay_ms(10);
  78.                         if(Read_KyeValue()==11)
  79.                         {
  80.                                 d=0;
  81.                                 while(Read_KyeValue()!=16);
  82.                                 select_d=1;
  83.                                 while(select_d)
  84.                                 {
  85.                                         key=Read_KyeValue();
  86.                                         if(key!=16)
  87.                                         {                                       
  88.                                                 delay_ms(20);
  89.                                                 if(key!=16)
  90.                                                 {
  91.                                                         if(key!=12&&key!=13&&key!=11)//??0-9
  92.                                                         {
  93.                                                                 if(d==0){d=key;}
  94.                                                                 else if(d>0&&d<10){d=d*10+key;}
  95.                                                                 else{d=d*10+key;}
  96.                                                         }
  97.                                                         if(key==13)
  98.               {
  99.                                                           key=16;select_d=0;
  100.                                                         }//??
  101.                                                         if(key==11){key=16;d=0;}//??
  102.                                                 }
  103.                                                 delay_ms(20);
  104.                                                 while(Read_KyeValue()!=16);
  105.                                                 daba(d,1500);
  106.                                                 delay_ms(TG);
  107.                                                 LED1_OFF;//chongdianjidianqi
  108.                                                 LED2_ON;//fangdainjidianqi
  109.                                                 delay_ms(Tchong);//???
  110.                                                 LED1_ON;
  111.                                                 LED2_ON;
  112.                                                 //delay_ms(200);
  113.                                                 //printf("443");
  114.                                                 LED1_ON;
  115.                                                 LED2_OFF;
  116.                                                 delay_ms(100);
  117.                                                 LED1_ON;
  118.                                                 LED2_ON;
  119.                                                 
  120.                                         }
  121.                                 }
  122.                         }
  123.                         printf("%d",d);
  124.                 }
  125.                 /********************************/
  126.                
  127.                
  128.                 if((Read_KyeValue()==11) && (pattern_flag==3))        //3
  129.                 {
  130.                         delay_ms(100);
  131.                         if(Read_KyeValue()==11)
  132.                         {
  133.                                 d=0;
  134.                                 while(Read_KyeValue()!=16);
  135.                                 select_d=1;
  136.                                 select_yaw=1;
  137.                                 printf("rrrr");
  138.                                 while(select_d)
  139.                                 {
  140.                                         key=Read_KyeValue();
  141.                                         //printf("%d",key);
  142.                                         if(key!=16)
  143.                                         {               
  144.             //printf("juli");                                                
  145.                                                 delay_ms(5);
  146.                                                 if(key!=16)
  147.                                                 {
  148.                                                         if(key!=12&&key!=13&&key!=11)//??0-9
  149.                                                         {
  150.                                                                 if(d==0){d=key;}
  151.                                                                 else if(d>0&&d<10){d=d*10+key;}
  152.                                                                 else if(d>10&&d<100){d=d*10+key;}
  153.                                                                 else if(d>100&&d<1000){d=d*10+key;}
  154.                                                                 else {temp=d*10+key;}
  155.                                                         }
  156.                                                         if(key==13)
  157.                             {
  158.                                                           key=16;
  159.                                                                 select_d=0;
  160.                                                                 //select_yaw=1;
  161.                                                         }//??
  162.                                                         //if(key==11){key=16;d=0;}//??
  163.                                                 }
  164.                                                 delay_ms(5);
  165.                                                 while(Read_KyeValue()!=16);
  166.                                                 
  167.                                         }
  168.                                 }
  169.                         }               
  170.                         d=temp/100;
  171.                         yaw=temp%100;
  172.                         
  173.                         /****************************/
  174.                         /*if(USART_RXBUF[5] == '-')
  175.                                         {
  176.                                                 aim_yaw = (angle*9.3333)+1500;
  177.                                         }
  178.                                         else
  179.                                         {
  180.                                                 aim_yaw = 1500-(angle*12.3333);
  181.                                         }*/
  182.                         
  183.                         /*******************************/
  184.                         
  185.                                         if(yaw>=30 && yaw<=60)
  186.                                         {
  187.                                                 aim_yaw=yaw;
  188.                                                 aim_yaw=(aim_yaw-30)*9.3333+1500;
  189.                                         }
  190.                                         else if(yaw<30 && yaw>=0)
  191.                                         {
  192.                                                 aim_yaw=30-yaw;
  193.                                                 aim_yaw=1500-(aim_yaw*12.3333);
  194.                                         }
  195.                                         else
  196.                                         {
  197.                                                 aim_yaw=1500;
  198.                                         }
  199.                                        
  200.                         daba(d,aim_yaw);
  201.                         delay_ms(TG);
  202.                         LED1_OFF;//chongdianjidianqi
  203.                         LED2_ON;//fangdainjidianqi
  204.                         delay_ms(Tchong);//???
  205.                         LED1_ON;
  206.                         LED2_ON;
  207.                         //delay_ms(200);
  208.                         //printf("443");
  209.                         LED1_ON;
  210.                         LED2_OFF;
  211.                         delay_ms(100);
  212.                         LED1_ON;
  213.                         LED2_ON;
  214.                         
  215.                         printf("%d\n",d);
  216.                         printf("%d\n",yaw);
  217.                 }
  218.                
  219. //                if(Read_KyeValue()==13)//???
  220. //                {                        
  221. //                        delay_ms(5);
  222. //                        //printf("yaw:%d,d:%d\n",yaw,d);               
  223. //                        //pitch=(0.5*(asin(d*9.8/(v0*v0*100)))*180/3.14);//pitch=0.5*arcsin(d*g/(v0*v0));
  224. //                //        printf("yaw:%d,pitch:%f,single:%d\n",yaw,pitch,single);
  225. //                        if(single==1)                                
  226. //                        {
  227. //                                Servo_PWM_Updata((pitch*10.9375)+1450,(yaw*11.1111)+1500);
  228. //                        }
  229. //                        else
  230. //                        {
  231. //                                Servo_PWM_Updata((pitch*10.9375)+1450,1500-(yaw*11.1111));
  232. //                        }
  233. //                if(Read_KyeValue()==14)//chongdian
  234. //                {
  235. //                        //LED1_TOGGLE        ;
  236. //                        printf("123");
  237. //                        LED1_OFF;//chongdianjidianqi
  238. //                        LED2_ON;//fangdainjidianqi
  239. //                        delay_ms(4000);//刚刚好
  240. //                        LED1_ON;
  241. //                        LED2_ON;
  242. //                        //delay_ms(200);
  243. //                        printf("443");
  244. //                        LED1_ON;
  245. //                        LED2_OFF;
  246. //                        delay_ms(100);
  247. //                        LED1_ON;
  248. //                        LED2_ON;
  249. //                        
  250. //                        
  251. //                }        
  252.                 tim ++;
  253.                 if(tim%1==0)
  254.                 {
  255.                         //daba(aim_distances,aim_yaw);//正式程序恢复
  256.                 }
  257.                
  258.                 if(tim ==10)
  259.                 {

  260.                         tim = 0;
  261.                 }
  262.                
  263.         }
  264. }
复制代码

所有资料51hei提供下载:
两轴云台2.0.7z (204.31 KB, 下载次数: 132)
回复

使用道具 举报

ID:170892 发表于 2019-9-6 20:36 | 显示全部楼层
您好,请问您用的超级电容是多大的
回复

使用道具 举报

ID:511461 发表于 2019-10-12 19:30 | 显示全部楼层
请问一下,电磁炮打靶你是怎么做的
回复

使用道具 举报

ID:467963 发表于 2020-2-23 23:02 | 显示全部楼层
aaaaaa。 发表于 2019-10-12 19:30
请问一下,电磁炮打靶你是怎么做的

两个自由度的舵机
回复

使用道具 举报

ID:467963 发表于 2020-2-23 23:02 | 显示全部楼层
aaaaaa。 发表于 2019-10-12 19:30
请问一下,电磁炮打靶你是怎么做的

两个自由度的舵机,用按键控制角度
回复

使用道具 举报

ID:519743 发表于 2021-6-5 22:56 | 显示全部楼层
在座的老铁们,有人实验过吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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