找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6386|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

四軸飛行器程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
偶爾在網(wǎng)上發(fā)現(xiàn)一個(gè)好玩的四軸飛行器程序,跟大家分享一下,也希望動(dòng)手能力強(qiáng)的童鞋能做出來(lái),純屬愛(ài)心分享,版權(quán)歸作者所有,切勿用于商業(yè)用途。




  1. //                                        STCunio

  2. //**********************************遙控器程序Rev1.3正式版*************************
  3. //聲明:程序作者不會(huì)對(duì)本程序進(jìn)行任何升級(jí)了,該程序就是該硬件的最終版本
  4. //本程序可以自行二次開(kāi)發(fā),不過(guò)需要將開(kāi)發(fā)后的版本上傳到阿莫論壇,這樣本程序開(kāi)源才有意義,謝謝!
  5. //          程序:SWUST 電氣自動(dòng)化13級(jí) LQM

  6. //          本程序適用于STC四軸的小日本手遙控器(右手油門(mén))
  7. //右手上下為油門(mén),左右為橫滾
  8. //左手上下為俯仰,左右為旋轉(zhuǎn)
  9. //                                 MCU工作頻率28MHZ!。
  10. #include <rtx51tny.h>
  11. #include <STC15F2K60S2.H>
  12. #include <NRF24L01.H>
  13. #include <AD.H>
  14. sbit RLED=P0^5;
  15. sbit GLED=P0^6;
  16. sbit LKEY=P4^7;
  17. sbit RKEY=P3^4;

  18. volatile int idata ay,ax,by,bx;
  19. volatile int idata cy,cx,dy,dx;
  20. volatile float idata battery;
  21. unsigned char idata TxBuf[20]={0};
  22. unsigned char idata RxBuf[20]={0};
  23. void IO_and_Init();

  24. void AD() _task_ 0 //獲取AD采樣數(shù)據(jù)
  25. {
  26.         IO_and_Init();   //初始化I/O口
  27.         os_create_task (1);  //啟動(dòng)進(jìn)程1
  28.         for(;;)
  29.         {
  30.   cy=getADCResult(3); //讀取4個(gè)搖桿通道每個(gè)通道的8位數(shù)據(jù),取值范圍0-255
  31.         Delay(10);
  32.         cx=getADCResult(2);
  33.         Delay(10);
  34.         dy=getADCResult(1);
  35.   Delay(10);
  36.         dx=getADCResult(0);
  37.         Delay(10);
  38.         battery=(getADCResult(4)*5.05*100)/256;   //電池電壓檢測(cè)通道 低于3.7V亮紅燈
  39.         Delay(10);
  40.         if(battery<=370)
  41.   {
  42.         RLED=1;GLED=0;
  43.         }
  44.         else
  45.         {
  46.         RLED=0;GLED=1;
  47.         }
  48.         os_wait(K_IVL,3,0);//延時(shí)3個(gè)節(jié)拍
  49. }
  50. }
  51. void NRF24L01()  _task_ 1
  52. {       
  53.         while(1)
  54.         {
  55.          TxBuf[0]++;
  56.          TxBuf[1]=128;
  57.          TxBuf[2]=128;
  58.          TxBuf[3]=128;
  59.          if(cy<20) {goto EXIT;}//當(dāng)油門(mén)拉至最低時(shí)遙控器解鎖
  60.          if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
  61.          if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
  62.          nRF24L01_TxPacket(TxBuf);//發(fā)送TxBuf數(shù)組的數(shù)據(jù)
  63.          os_wait(K_IVL,2,0); //給一定延時(shí)讓數(shù)據(jù)發(fā)送完成
  64.         }
  65.         EXIT:
  66.         while(1)
  67.         {
  68.                 if((dy-by)>=255){TxBuf[1]=255;}//用上電記錄的數(shù)據(jù)對(duì)采樣數(shù)據(jù)進(jìn)行修正,保證搖桿中位時(shí)數(shù)據(jù)為128
  69.                 else if((dy-by)<=0){TxBuf[1]=0;}
  70.                 else{TxBuf[1]=dy-by;}
  71.                
  72.                 if((dx-bx)>=255){TxBuf[3]=255;}
  73.                 else if((dx-bx)<=0){TxBuf[3]=0;}
  74.                 else{TxBuf[3]=dx-bx;}
  75.                
  76.                 if((cx-ax)>=255){TxBuf[2]=255;}
  77.                 else if((cx-ax)<=0){TxBuf[2]=0;}
  78.                 else{TxBuf[2]=cx-ax;}
  79.                 //油門(mén):TxBuf[4]
  80.     //Yaw:TxBuf[3]
  81.     //俯仰:TxBuf[1]
  82.     //橫滾:TxBuf[2]
  83.                 TxBuf[4]=cy;//油門(mén)通道不需處理,直接發(fā)送AD檢測(cè)的8位數(shù)據(jù)即可,根據(jù)AD采樣原理易知讀取的AD采樣數(shù)據(jù)不可能為負(fù)也不可能大于255
  84.                 if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
  85.           if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
  86.                 TxBuf[0]++;
  87.           nRF24L01_TxPacket(TxBuf);
  88.                 os_wait(K_IVL,2,0); //給一定延時(shí)讓數(shù)據(jù)發(fā)送完成
  89.         }
  90. }
  91. void IO_and_Init()
  92. {
  93.                 P1M0=0x00;  //P1設(shè)為高阻模式
  94.                 P1M1=0xFF;
  95.                 P0M0=0Xff; //其他I/O口設(shè)置為準(zhǔn)雙向,弱上拉模式
  96.                 P0M1=0X00;
  97.                 P2M0=0X00;
  98.                 P2M1=0X00;
  99.                 P3M0=0X00;
  100.                 P3M1=0X00;
  101.                 P4M0=0X00;
  102.                 P4M1=0X00;
  103.                 P5M0=0Xff;
  104.                 P5M1=0X00;
  105.                 LKEY=1;  //拉高按鍵檢測(cè)I/O口電平,按鍵為低電平觸發(fā)
  106.                 RKEY=1;
  107.                 init_NRF24L01();  //初始化無(wú)線模塊
  108.     adc_init();        //初始化AD檢測(cè)模塊
  109.           ax=getADCResult(2)-128; //記錄上電時(shí)搖桿的數(shù)據(jù)作為中位修正,因?yàn)閾u桿中位要為128即256/2
  110.           Delay(10);
  111.           by=getADCResult(1)-128;
  112.     Delay(10);
  113.           bx=getADCResult(0)-128;        //記錄回中的軸的初始位置數(shù)據(jù)
  114.           Delay(10);
  115. }
復(fù)制代碼


四軸遙控器程序 2.1.rar

109.33 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:166662 發(fā)表于 2017-3-18 14:41 | 只看該作者
很好的源碼 感謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:276654 發(fā)表于 2019-8-10 18:49 | 只看該作者
請(qǐng)高手指點(diǎn)一下為何沒(méi)有main主函數(shù)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表