標(biāo)題: 基于stm32的四軸遙控程序 [打印本頁(yè)]

作者: fwp1040    時(shí)間: 2017-8-6 09:31
標(biāo)題: 基于stm32的四軸遙控程序
可能寫得不太好啊  呵呵
所有資料51hei提供下載:
yaokong_heise.rar (305.16 KB, 下載次數(shù): 33)

單片機(jī)源程序如下:
  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. 旋轉(zhuǎn) Get_Adc_Average(1,5);

  9. *******************************************************/
  10. /*
  11. 發(fā)送的數(shù)組
  12. 0:0X12 校驗(yàn)碼
  13. 1:起飛標(biāo)志      1:可以起飛 0:不可起飛 2:參數(shù)調(diào)節(jié)
  14. 2:前后方向控制  0:停止 1:后  2:前
  15. 3:左右方向控制  0:停止 1:左  2:右
  16. 4:油門控制      0:停止 1:下降 2:上升
  17. 5:旋轉(zhuǎn)控制      0:停止 1:逆時(shí)針 2:順時(shí)針
  18. */
  19. u8 nrf_send[6];
  20. void xianshi_fly(void);

  21. void check_main(void);
  22. //按鍵參數(shù)
  23. extern key_type key;
  24. //接收信號(hào)標(biāo)志
  25. u8 jieshou_error=0;
  26. //搖桿電位器參數(shù)
  27. extern yaogan yaogan_ad;
  28. //通用參數(shù)
  29. extern tongyong_type tongyong;
  30. /*
  31. 起飛標(biāo)志
  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;  //不可起飛 定時(shí)器開(kāi)啟后可以起飛
  41.         nrf_send[0]=0x12;
  42.         delay_init();//初始化延時(shí)函數(shù)
  43.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  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())//檢測(cè)NRF24L01是否存在
  53.         {

  54.                 OLED_ShowString(20,5,"NRF_ERROR",16);
  55.         }
  56.         OLED_ShowString(20,5,"         ",16);
  57.         //等待接收機(jī)身初始化結(jié)果
  58.         NRF24L01_RX_Mode();  //接收模式
  59.         delay_ms(3000);
  60.         while(NRF24L01_RxPacket(tmp_buf_rec))//一旦接收到信息,則顯示出來(lái).
  61.         {
  62.                 delay_ms(1);
  63.                 t++;
  64.                 if(t>1000) break;
  65.                
  66.         }
  67.         tongyong.dianya_jishen=tmp_buf_rec[2]+256;
  68.         //機(jī)身電壓顯示
  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.         //機(jī)身狀態(tài)返回
  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.         //主函數(shù)循環(huán)函數(shù)
  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)   //發(fā)送函數(shù)
  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. }

復(fù)制代碼








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1