|
偶爾在網(wǎng)上發(fā)現(xiàn)一個(gè)好玩的四軸飛行器程序,跟大家分享一下,也希望動(dòng)手能力強(qiáng)的童鞋能做出來(lái),純屬愛(ài)心分享,版權(quán)歸作者所有,切勿用于商業(yè)用途。
0.png (42.44 KB, 下載次數(shù): 114)
下載附件
2016-6-1 14:05 上傳
0.png (52.6 KB, 下載次數(shù): 90)
下載附件
2016-6-1 14:05 上傳
- // STCunio
- //**********************************遙控器程序Rev1.3正式版*************************
- //聲明:程序作者不會(huì)對(duì)本程序進(jìn)行任何升級(jí)了,該程序就是該硬件的最終版本
- //本程序可以自行二次開(kāi)發(fā),不過(guò)需要將開(kāi)發(fā)后的版本上傳到阿莫論壇,這樣本程序開(kāi)源才有意義,謝謝!
- // 程序:SWUST 電氣自動(dòng)化13級(jí) LQM
- // 本程序適用于STC四軸的小日本手遙控器(右手油門(mén))
- //右手上下為油門(mén),左右為橫滾
- //左手上下為俯仰,左右為旋轉(zhuǎn)
- // MCU工作頻率28MHZ!。
- #include <rtx51tny.h>
- #include <STC15F2K60S2.H>
- #include <NRF24L01.H>
- #include <AD.H>
- sbit RLED=P0^5;
- sbit GLED=P0^6;
- sbit LKEY=P4^7;
- sbit RKEY=P3^4;
- volatile int idata ay,ax,by,bx;
- volatile int idata cy,cx,dy,dx;
- volatile float idata battery;
- unsigned char idata TxBuf[20]={0};
- unsigned char idata RxBuf[20]={0};
- void IO_and_Init();
- void AD() _task_ 0 //獲取AD采樣數(shù)據(jù)
- {
- IO_and_Init(); //初始化I/O口
- os_create_task (1); //啟動(dòng)進(jìn)程1
- for(;;)
- {
- cy=getADCResult(3); //讀取4個(gè)搖桿通道每個(gè)通道的8位數(shù)據(jù),取值范圍0-255
- Delay(10);
- cx=getADCResult(2);
- Delay(10);
- dy=getADCResult(1);
- Delay(10);
- dx=getADCResult(0);
- Delay(10);
- battery=(getADCResult(4)*5.05*100)/256; //電池電壓檢測(cè)通道 低于3.7V亮紅燈
- Delay(10);
- if(battery<=370)
- {
- RLED=1;GLED=0;
- }
- else
- {
- RLED=0;GLED=1;
- }
- os_wait(K_IVL,3,0);//延時(shí)3個(gè)節(jié)拍
- }
- }
- void NRF24L01() _task_ 1
- {
- while(1)
- {
- TxBuf[0]++;
- TxBuf[1]=128;
- TxBuf[2]=128;
- TxBuf[3]=128;
- if(cy<20) {goto EXIT;}//當(dāng)油門(mén)拉至最低時(shí)遙控器解鎖
- if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
- if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
- nRF24L01_TxPacket(TxBuf);//發(fā)送TxBuf數(shù)組的數(shù)據(jù)
- os_wait(K_IVL,2,0); //給一定延時(shí)讓數(shù)據(jù)發(fā)送完成
- }
- EXIT:
- while(1)
- {
- if((dy-by)>=255){TxBuf[1]=255;}//用上電記錄的數(shù)據(jù)對(duì)采樣數(shù)據(jù)進(jìn)行修正,保證搖桿中位時(shí)數(shù)據(jù)為128
- else if((dy-by)<=0){TxBuf[1]=0;}
- else{TxBuf[1]=dy-by;}
-
- if((dx-bx)>=255){TxBuf[3]=255;}
- else if((dx-bx)<=0){TxBuf[3]=0;}
- else{TxBuf[3]=dx-bx;}
-
- if((cx-ax)>=255){TxBuf[2]=255;}
- else if((cx-ax)<=0){TxBuf[2]=0;}
- else{TxBuf[2]=cx-ax;}
- //油門(mén):TxBuf[4]
- //Yaw:TxBuf[3]
- //俯仰:TxBuf[1]
- //橫滾:TxBuf[2]
- TxBuf[4]=cy;//油門(mén)通道不需處理,直接發(fā)送AD檢測(cè)的8位數(shù)據(jù)即可,根據(jù)AD采樣原理易知讀取的AD采樣數(shù)據(jù)不可能為負(fù)也不可能大于255
- if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
- if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
- TxBuf[0]++;
- nRF24L01_TxPacket(TxBuf);
- os_wait(K_IVL,2,0); //給一定延時(shí)讓數(shù)據(jù)發(fā)送完成
- }
- }
- void IO_and_Init()
- {
- P1M0=0x00; //P1設(shè)為高阻模式
- P1M1=0xFF;
- P0M0=0Xff; //其他I/O口設(shè)置為準(zhǔn)雙向,弱上拉模式
- P0M1=0X00;
- P2M0=0X00;
- P2M1=0X00;
- P3M0=0X00;
- P3M1=0X00;
- P4M0=0X00;
- P4M1=0X00;
- P5M0=0Xff;
- P5M1=0X00;
- LKEY=1; //拉高按鍵檢測(cè)I/O口電平,按鍵為低電平觸發(fā)
- RKEY=1;
- init_NRF24L01(); //初始化無(wú)線模塊
- adc_init(); //初始化AD檢測(cè)模塊
- ax=getADCResult(2)-128; //記錄上電時(shí)搖桿的數(shù)據(jù)作為中位修正,因?yàn)閾u桿中位要為128即256/2
- Delay(10);
- by=getADCResult(1)-128;
- Delay(10);
- bx=getADCResult(0)-128; //記錄回中的軸的初始位置數(shù)據(jù)
- Delay(10);
- }
復(fù)制代碼
|
-
-
四軸遙控器程序 2.1.rar
2016-5-31 22:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
109.33 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|