標(biāo)題:
基于stm32的四軸遙控程序
[打印本頁(yè)]
作者:
fwp1040
時(shí)間:
2017-8-6 09:31
標(biāo)題:
基于stm32的四軸遙控程序
可能寫得不太好啊 呵呵
所有資料51hei提供下載:
yaokong_heise.rar
(305.16 KB, 下載次數(shù): 33)
2017-8-6 16:28 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
單片機(jī)源程序如下:
#include "sys.h"
#include "head.h"
#include "key.h"
/*******************************************************
前后 Get_Adc_Average(11,5);
左右 Get_Adc_Average(10,5);
油門 Get_Adc_Average(2,5);
旋轉(zhuǎn) Get_Adc_Average(1,5);
*******************************************************/
/*
發(fā)送的數(shù)組
0:0X12 校驗(yàn)碼
1:起飛標(biāo)志 1:可以起飛 0:不可起飛 2:參數(shù)調(diào)節(jié)
2:前后方向控制 0:停止 1:后 2:前
3:左右方向控制 0:停止 1:左 2:右
4:油門控制 0:停止 1:下降 2:上升
5:旋轉(zhuǎn)控制 0:停止 1:逆時(shí)針 2:順時(shí)針
*/
u8 nrf_send[6];
void xianshi_fly(void);
void check_main(void);
//按鍵參數(shù)
extern key_type key;
//接收信號(hào)標(biāo)志
u8 jieshou_error=0;
//搖桿電位器參數(shù)
extern yaogan yaogan_ad;
//通用參數(shù)
extern tongyong_type tongyong;
/*
起飛標(biāo)志
值為0 可以起飛
1 初始化未完成
*/
u8 jishen_error=0;
int main(void)
{
u16 t=0;
u8 tmp_buf_rec[4];
nrf_send[1]=0; //不可起飛 定時(shí)器開(kāi)啟后可以起飛
nrf_send[0]=0x12;
delay_init();//初始化延時(shí)函數(shù)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
led_init(); //GPIO初始化
ad_init(); //AD初始化
key_init();
OLED_Init();
OLED_Clear();
canshu_chushihua();
OLED_ShowString(20,3,"WAIT...",16);
NRF24L01_Init(); //NRF24L01初始化
while(NRF24L01_Check())//檢測(cè)NRF24L01是否存在
{
OLED_ShowString(20,5,"NRF_ERROR",16);
}
OLED_ShowString(20,5," ",16);
//等待接收機(jī)身初始化結(jié)果
NRF24L01_RX_Mode(); //接收模式
delay_ms(3000);
while(NRF24L01_RxPacket(tmp_buf_rec))//一旦接收到信息,則顯示出來(lái).
{
delay_ms(1);
t++;
if(t>1000) break;
}
tongyong.dianya_jishen=tmp_buf_rec[2]+256;
//機(jī)身電壓顯示
OLED_ShowNum(8*10,0,tongyong.dianya_jishen/100,1,16);
OLED_ShowString(8*11,0,".",16);
OLED_ShowNum(8*12,0,tongyong.dianya_jishen%100,2,16);
OLED_ShowString(0,0,"fus power:",16);
//機(jī)身狀態(tài)返回
if(tmp_buf_rec[3]==0)
{
OLED_ShowString(20,5,"FUS OK!",16);
}
else if(tmp_buf_rec[3]==1)
{
jishen_error=1;
OLED_ShowString(20,5,"MPU ERROR!",16);
}
else if(tmp_buf_rec[3]==2)
{
jishen_error=1;
OLED_ShowString(20,5,"NRF ERROR!",16);
}
else if(tmp_buf_rec[3]==3)
{
jishen_error=1;
OLED_ShowString(20,5,"POWER LOW!",16);
}
if(jieshou_error==1)
{
OLED_ShowString(20,5,"REC ERROR!",16);
}
NRF24L01_TX_Mode(); //接收模式
/***********此處需改***************/
//主函數(shù)循環(huán)函數(shù)
check_main();
}
void check_main(void)
{
int ceshi_x0,ceshi_y0,ceshi_x1,ceshi_y1;
u8 t=0;
OLED_ShowString(20,3,"INIT OK!",16);
while(1)
{
if(nrf_send[1]!=2) //發(fā)送函數(shù)
{
if(NRF24L01_TxPacket(nrf_send)==TX_OK)
{
LED1=!LED1;
}
else
{
LED3=!LED3;
}
}
//起飛操作:兩搖桿拉至最低保持一秒
if(nrf_send[1]==0)
{
ceshi_x0=Get_Adc_Average(10,5);
ceshi_y0=Get_Adc_Average(2,5);
if(ceshi_x0<100&&ceshi_y0<100)
{
delay_ms(10);
ceshi_x1=Get_Adc_Average(10,5);
ceshi_y1=Get_Adc_Average(2,5);
if(ceshi_y1<100&&ceshi_x1<100)
{
t++;
if(jishen_error==0&&t>10)
{
OLED_Clear();
nrf_send[1]=1; //可以起飛
xianshi_fly();
time3_init(10);
}
}
else
{
t=0;
}
}
}
}
}
void xianshi_fly(void)
{
OLED_ShowCHinese(85,0,0); //上
OLED_ShowCHinese(85,4,1); //下
OLED_ShowCHinese(69,2,2); //左
OLED_ShowCHinese(101,2,3); //右
OLED_ShowString(0,0,"Y:",16);
OLED_ShowString(0,4,"X:",16);
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1