找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3875|回复: 0
打印 上一主题 下一主题
收起左侧

基于stm32的四轴遥控程序

[复制链接]
跳转到指定楼层
楼主
ID:225113 发表于 2017-8-6 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可能写得不太好啊  呵呵
所有资料51hei提供下载:
yaokong_heise.rar (305.16 KB, 下载次数: 31)

单片机源程序如下:
  1. #include "sys.h"
  2. #include "head.h"
  3. #include "key.h"
  4. /*******************************************************
  5. 前后  Get_Adc_Average(11,5);
  6. 左右  Get_Adc_Average(10,5);
  7. 油门 Get_Adc_Average(2,5);
  8. 旋转 Get_Adc_Average(1,5);

  9. *******************************************************/
  10. /*
  11. 发送的数组
  12. 0:0X12 校验码
  13. 1:起飞标志      1:可以起飞 0:不可起飞 2:参数调节
  14. 2:前后方向控制  0:停止 1:后  2:前
  15. 3:左右方向控制  0:停止 1:左  2:右
  16. 4:油门控制      0:停止 1:下降 2:上升
  17. 5:旋转控制      0:停止 1:逆时针 2:顺时针
  18. */
  19. u8 nrf_send[6];
  20. void xianshi_fly(void);

  21. void check_main(void);
  22. //按键参数
  23. extern key_type key;
  24. //接收信号标志
  25. u8 jieshou_error=0;
  26. //摇杆电位器参数
  27. extern yaogan yaogan_ad;
  28. //通用参数
  29. extern tongyong_type tongyong;
  30. /*
  31. 起飞标志
  32. 值为0 可以起飞
  33.     1 初始化未完成
  34. */
  35. u8 jishen_error=0;

  36. int main(void)  
  37. {
  38.         u16 t=0;
  39.         u8 tmp_buf_rec[4];
  40.         nrf_send[1]=0;  //不可起飞 定时器开启后可以起飞
  41.         nrf_send[0]=0x12;
  42.         delay_init();//初始化延时函数
  43.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  44.         led_init();  //GPIO初始化
  45.         ad_init();   //AD初始化
  46.         key_init();
  47.         OLED_Init();
  48.         OLED_Clear();
  49.         canshu_chushihua();
  50.         OLED_ShowString(20,3,"WAIT...",16);
  51.         NRF24L01_Init(); //NRF24L01初始化
  52.         while(NRF24L01_Check())//检测NRF24L01是否存在
  53.         {

  54.                 OLED_ShowString(20,5,"NRF_ERROR",16);
  55.         }
  56.         OLED_ShowString(20,5,"         ",16);
  57.         //等待接收机身初始化结果
  58.         NRF24L01_RX_Mode();  //接收模式
  59.         delay_ms(3000);
  60.         while(NRF24L01_RxPacket(tmp_buf_rec))//一旦接收到信息,则显示出来.
  61.         {
  62.                 delay_ms(1);
  63.                 t++;
  64.                 if(t>1000) break;
  65.                
  66.         }
  67.         tongyong.dianya_jishen=tmp_buf_rec[2]+256;
  68.         //机身电压显示
  69.         OLED_ShowNum(8*10,0,tongyong.dianya_jishen/100,1,16);
  70.         OLED_ShowString(8*11,0,".",16);
  71.         OLED_ShowNum(8*12,0,tongyong.dianya_jishen%100,2,16);
  72.         OLED_ShowString(0,0,"fus power:",16);
  73.         //机身状态返回
  74.         if(tmp_buf_rec[3]==0)
  75.         {
  76.                 OLED_ShowString(20,5,"FUS OK!",16);
  77.         }
  78.         else if(tmp_buf_rec[3]==1)
  79.         {
  80.                 jishen_error=1;
  81.                 OLED_ShowString(20,5,"MPU ERROR!",16);
  82.         }
  83.         else if(tmp_buf_rec[3]==2)
  84.         {
  85.                 jishen_error=1;
  86.                 OLED_ShowString(20,5,"NRF ERROR!",16);
  87.         }
  88.         else if(tmp_buf_rec[3]==3)
  89.         {
  90.                 jishen_error=1;
  91.                 OLED_ShowString(20,5,"POWER LOW!",16);
  92.         }
  93.         if(jieshou_error==1)
  94.         {
  95.                 OLED_ShowString(20,5,"REC ERROR!",16);
  96.         }
  97.         NRF24L01_TX_Mode();  //接收模式
  98.         /***********此处需改***************/
  99.         //主函数循环函数
  100.         check_main();
  101. }
  102. void check_main(void)
  103. {
  104.         int ceshi_x0,ceshi_y0,ceshi_x1,ceshi_y1;
  105.         u8 t=0;
  106.         OLED_ShowString(20,3,"INIT OK!",16);
  107.         while(1)
  108.         {
  109.                 if(nrf_send[1]!=2)   //发送函数
  110.                 {
  111.                         if(NRF24L01_TxPacket(nrf_send)==TX_OK)
  112.                         {
  113.                                 LED1=!LED1;
  114.                         }
  115.                         else
  116.                         {
  117.                                 LED3=!LED3;
  118.                         }
  119.                 }
  120.                 //起飞操作:两摇杆拉至最低保持一秒
  121.                 if(nrf_send[1]==0)
  122.                 {
  123.                         
  124.                         ceshi_x0=Get_Adc_Average(10,5);
  125.                         ceshi_y0=Get_Adc_Average(2,5);
  126.                         if(ceshi_x0<100&&ceshi_y0<100)
  127.                         {
  128.                                 delay_ms(10);
  129.                                 ceshi_x1=Get_Adc_Average(10,5);
  130.                                 ceshi_y1=Get_Adc_Average(2,5);
  131.                                 if(ceshi_y1<100&&ceshi_x1<100)
  132.                                 {
  133.                                         t++;
  134.                                         if(jishen_error==0&&t>10)
  135.                                         {
  136.                                                 OLED_Clear();
  137.                                                 nrf_send[1]=1;  //可以起飞
  138.                                                 xianshi_fly();
  139.                                                 time3_init(10);
  140.                                         }
  141.                                 }
  142.                                 else
  143.                                 {
  144.                                         t=0;
  145.                                 }
  146.                         }
  147.                         
  148.                         
  149.                 }
  150.         }
  151. }










  152. void xianshi_fly(void)
  153. {

  154.         OLED_ShowCHinese(85,0,0);  //上
  155.         OLED_ShowCHinese(85,4,1);  //下
  156.         OLED_ShowCHinese(69,2,2);   //左
  157.         OLED_ShowCHinese(101,2,3);   //右

  158.         OLED_ShowString(0,0,"Y:",16);
  159.         OLED_ShowString(0,4,"X:",16);
  160. }

复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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