Exemplo n.º 1
0
void main()
{
	unsigned char testdisplay[8]={'1','1','1','1','1','1','1','1'};
	uchar i; //自己加的
//	uchar datedisplay[7];
	init_io();
	P0=0x00;//屏蔽数码管
	 delay(10);                 //延时
//    wela=0;
//	dula=0; 
//	inte();
 lcd_init2();	
	lcd12864(testdisplay);
	/******************自己加的**************************/
	while(NRF_Check());	

	RX_Mode();//	
	interface();
	while(NRF24L01_RxPacket(RxBuf)!=0);
	while(1)
	{
		if(NRF24L01_RxPacket(RxBuf)==0)		
		{
			for(i=0;i<8;i++)
			datedisplay[i]=RxBuf[i];	
		}

	checkbutton();
	lcd12864(datedisplay);

	}		
}
Exemplo n.º 2
0
//Send a packet and receive the ACK
//Return true in case of success.
//Polling implementation
unsigned char NRF24L01_SendPacket(char *payload, char len, char *ackPayload, char *ackLen)
{
  char status = 0;
  
  //Send the packet
  NRF24L01_TxPacket(payload, len);
  //Wait for something to happen
  while(((status=NRF24L01_Nop())&0x70) == 0);
  
  // Clear the flags
  NRF24L01_WriteReg(REG_STATUS, 0x70);
  
  //Return FALSE if the packet has not been transmited
  if (status&BIT_MAX_RT) {
    NRF24L01_FlushTx();
    return 0;
  }
    
  //Receive the ackPayload if any has been received
  if (status&BIT_RX_DR)
    *ackLen = NRF24L01_RxPacket(ackPayload);
  else 
    *ackLen = 0;
  
  NRF24L01_FlushRx();
  
  return status&BIT_TX_DS;
}
Exemplo n.º 3
0
void lock()
{
	u8 i=0;
	if(LOCK)
		{
			printf("locking\r\n");
		if(NRF_flag == 1)
					{
							if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
							{
								for(i=0;i<9;i++)
								{
									if(tmp_buf[i] != 0xff)break;
									UN_LOCK = 0;
								}
								if(i>=9)
								{
									UN_LOCK = 1;//解锁成功
									LOCK = 0;   //不需要继续解锁
									
									first_unlock =1;
									i=0;
								}
							NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 
							}
						}
				NRF_flag = 0;
					TIM_Cmd(TIM4, ENABLE);
					Nrf_Star;
					LED2 =!LED2;	
		}
	}
Exemplo n.º 4
0
 int main(void)
 {	
	u8 rx_buf[10];
	System_init();
	TIM_Cmd(TIM3,ENABLE);
	TIM_Cmd(TIM4,ENABLE);
	 
	while(1)
	{
		while(1)
		{
			if(NRF24L01_RxPacket(rx_buf) == 0)
			{
				break;
			}
		}
		switch(rx_buf[0])
		{
			case '1':	run1();										break;
			case '2':	run2();										break;
			case '3':	run3();    delay_ms(3000);  PCout(0) = 0;	break;
			case '4':	run4();    delay_ms(3000);  PCout(0) = 0;   break;
			case '5':	run5(); 									break;
			default:		   									    break;
		}
		rx_buf[0] = 0;
	}
	
	return 0;
 }
Exemplo n.º 5
0
/******************************以下finsh中测试函数*****************************/
static void rt_rf_thread_entry(void* parameter)
{
  rt_uint8_t buf[TX_ADR_WIDTH] = {0x00};

  NRF24L01_Init();  
  if(NRF24L01_Check()==RT_EOK)
  {
    rt_kprintf("\r\n RF1 模块初始化成功!\r\n");
  }
  else  
  {
    rt_kprintf("\r\n RF1 模块不存在!\r\n");
    return;
  }
  RX_Mode();
  while (1)
  {  
    if(NRF24L01_RxPacket(buf) == RT_EOK)
    {
       rt_kprintf("\r\n RF1 接收到数据:\r\n"); 
        {
          rt_kprintf((char const*)buf);
        }
    }
     
    rt_thread_delay(RT_TICK_PER_SECOND/100);        
  }
}
Exemplo n.º 6
0
__interrupt void PORT2_ISR(void)
{
  if(P2IFG & 0x40) {
    LPM3_EXIT;
    NRF24L01_RxPacket(rece_buf);
  }
  P2IFG =0x00;
}
Exemplo n.º 7
0
void main()
{
	uchar i; //自己加的
	init_io();
	P0=0x00;//屏蔽数码管
  Delay400Ms();                 //延时
	
	/******************自己加的**************************/
	RX_Mode();
	while(NRF24L01_RxPacket(RxBuf)!=0);
	while(1)
	{
		if(NRF24L01_RxPacket(RxBuf)==0)		
		{
			for(i=0;i<8;i++)
			datedisplay[i]=RxBuf[i];	
		}
		display();
	}		
}
Exemplo n.º 8
0
//主循环检测数据包
//返回是否成功处理包,0成功,1失败或无数据
u8 deal_wpan(void)  //wpan检查是否有包,及处理
{
    if(NRF24L01_IRQ==0) {   //收到包
        NRF24L01_RxPacket((u8 *)&wpan_pkt); //170us读取
        if(deal_pkt(&wpan_pkt)) {   //返回1表示读信息,要返回数据//40us   
            return send_pkt(&wpan_pkt);
        }
        return 0;
    }
    return 1;
}
Exemplo n.º 9
0
Arquivo: main.c Projeto: kenziD/ANO
int main(void)
{
    int dianya_fly = 0;
    SysTick_Init();
    Tim3_Init(500);
    Nvic_Init();
    LED_Init();
    ADC1_Init();
    USART1_Config(115200);
    KEY_Init();
    NRF24L01_Init();
    while (NRF24L01_Check())	//检查NRF24L01是否在位.要放在设置TX_MODE之前,否则设置的发送地址会变成check中的0XA5 ,将与原接收地址对不上
    {
        LED2_ON;
        LED1_OFF;
        printf("no");
    }
    LED1_ON;
    LED2_OFF;
    //TX mode
    //NRF24L01_TX_Mode();
    //NRF24L01_Mode_Config(2);

    //RX mode
    NRF24L01_Mode_Config(3);
    while (1)
    {
        key = KEY_scan();


        if (NRF24L01_RxPacket(tmp_buf) == 0)
        {
            NRF24L01_TxPacket_AP(rc_buf);
            LED1_ON;
            if(tmp_buf[0]==0x88 && tmp_buf[1]==0xAE && tmp_buf[2]==0x1C)
            {
                dianya_fly = tmp_buf[17]<<8|tmp_buf[18];
                if(dianya_fly<36 && dianya_fly>20)
                {
                    LED2_ON;
                }
            }
            send_wave(32,tmp_buf);
        }
        else
        {
            LED1_OFF;
        }
    }
}
Exemplo n.º 10
0
//接收数据包
//0,ok;1,err
u8 rec_pkt(pkt_t * pkt)
{
    u32 t;
    u8 res = 1;
    RX_Mode(&ch);   //使用对端地址接收
    t = systick;
    while(systick - t < 10 && NRF24L01_IRQ); //等待20ms,读取返回值
    if(systick - t < 10)
    {
        NRF24L01_RxPacket((u8 *)pkt); //170us读取
        res = 0;
    }
    RX_Mode(&mych);//最后返回本机接收模式
    return res;
}
Exemplo n.º 11
0
void run2()
{
	u8 ack[2];
	float k;
	u8 run_flag = 0;		// nove dir flag
	u8 tar2_flag;
	float tar2_angle[]={9.9,10.54,11.18,11.82,12.46,13.09,13.73,14.30,14.97,15.59,16.22,16.81,17.40,18.08,18.66,19.2};
	u16 pwm_data[]= {10000,10000,10000,12000,12000,12000,13500,13500,13500,14000,14000,14000,14800,14800,14800,14800};
	float tar2_angle_data[100],tar2_angle_data_max;
	float old_angle,new_angle;
	float x_angle;
	u8 rx_buf[10];
	u8 long_data;
	u8 tar2_check = 1;
	int time_value;
	
	dc_moter_setspeed(2,65000);
	dc_moter_setspeed(4,65000);
	while(1)						//rev data
	{
		if(NRF24L01_RxPacket(rx_buf) == 0)
		{
			break;
		}
	}
	LED1 = 0;
	long_data = rx_buf[0]*10+rx_buf[1];
	if(long_data % 2)
	{
		long_data --;
	}
	//printf("long_data %d",long_data);
	x_angle = tar2_angle[(long_data-30)/2];
	
	if(long_data >= 30 && long_data <35)
	{
		k = K30;
	}
	else if(long_data >= 35 && long_data <40)
	{
		k = K35;
	}
	else if(long_data >= 40 && long_data <45)
	{
		k = K40;
	}
	else if(long_data >= 45 && long_data <50)
	{
		k = K45;
	}
	else if(long_data >= 50 && long_data <55)
	{
		k = K50;
	}
	else if(long_data >= 55 && long_data <=60)
	{
		k = K55;
	}
	
	dc_cmd(2,1);
	delay_ms(780);
	dc_cmd(2,0);
	
	dc_cmd(4,1);
	delay_ms(780);
	dc_cmd(4,0);
	
	dc_cmd(2,1);
	delay_ms(780);
	dc_cmd(2,0);
	
	dc_cmd(4,1);
	delay_ms(780);
	dc_cmd(4,0);
	
	mpu6050_get();
	old_angle = angle[1];
	while(1)
	{
		delay_ms(10);			//By QL 20150814
		mpu6050_get();
		new_angle = angle[1];
		if((new_angle - old_angle)>0)
		{
			dc_cmd(2,1);
			dc_cmd(4,0);
		}
		else if((new_angle - old_angle)<0)
		{
			dc_cmd(4,1);
			dc_cmd(2,0);
		}
		if(new_angle > x_angle)
		{
			Beep(1);
			dc_cmd(2,0);
			break;
		}
		if(0 ==NRF24L01_RxPacket(ack))
		{
			Beep(0);
			if(ack[0]  == 's')
			{
				PDout(2)=1;
				dc_cmd(2,0);
				dc_cmd(4,0);
				return;
			}
		}
	}
	
	time_value = (int)(k * KbuChang);
	
	while(1)			// 摆-----补偿循环
	{
		mpu6050_get();
		old_angle = angle[1];
		delay_ms(10);			//By QL 20150814
		mpu6050_get();
		new_angle = angle[1];
		
		if((new_angle - old_angle)>0 && (run_flag == 0))
		{
			dc_cmd(4,1);			// start MT
			delay_ms(time_value);
			dc_cmd(4,0);			// Stop MT
			run_flag = 1;
		}
		if((new_angle - old_angle)<0)
		{
			run_flag = 0;
		}
		if(0 ==NRF24L01_RxPacket(ack))
		{
			Beep(0);
			if(ack[0]  == 's')
			{
				PDout(2)=1;
				dc_cmd(2,0);
				dc_cmd(4,0);
				return;
			}
		}
	}
}
Exemplo n.º 12
0
void run3()
{
	u8 tar3_time;
	int i;
	float old_angle,new_angle;
	int x1_pwm_data[20] = {65000,65000,60000,60000,65000,48000,45000,40000,30000,0};
	int y1_pwm_data[20] = {0,35000,40000,55000,65000,60000,60000,60000,60000,60000};
	int x2_pwm_data[20] = {45000,48000,65000,60000,60000,65000,65000,65000};
	int y2_pwm_data[20] = {60000,60000,65000,55000,40000,35000,32000,30000};
	u8 dir = 0;
    float x_max_angle,y_max_angle;
	float x_angle;
	float x_old_angle,x_new_angle,y_old_angle,y_new_angle;
	u8 tar3_flag = 0;
	int k = 0;
	int x_pwm,y_pwm;
	u8 rx_buf[10];
	int long_angle;
	//printf("servlet3");
	while(1)
	{
		if(NRF24L01_RxPacket(rx_buf) == 0)
		{
			break;
		}
	}
	LED1 = 0;
	long_angle = rx_buf[0]*100+rx_buf[1]*10+rx_buf[2];
	
	if(long_angle > 180)
	{
		long_angle = 360 -long_angle;
	}
	printf("long_angle %d",long_angle);
	
	if(long_angle <= 90)
	{
		tar3_flag = 0;			// xiang xian 1
	}
	else if(long_angle > 90)
	{
		tar3_flag = 1;			// xiang xian 2
	}
	tar3_time = 12;
	if(long_angle > 45 && long_angle < 135)
	{
		tar3_time = 6;
	}

	if(tar3_flag == 0)			// area 1 process
	{
	
		x_pwm = x1_pwm_data[(long_angle)/10];
		y_pwm = y1_pwm_data[(long_angle)/10];
		//printf("x_pwm %d y_pwm %d",x_pwm,y_pwm);
		
		dc_moter_setspeed(1,x_pwm);
		dc_moter_setspeed(2,y_pwm);
		dc_moter_setspeed(3,x_pwm);
		dc_moter_setspeed(4,y_pwm);
		i = 0;
		while(1)
		{
			i++;
			dc_cmd(1,0);	// move to XX_1
			dc_cmd(2,0);
			dc_cmd(3,1);	
			dc_cmd(4,1);
			delay_ms(800);
			
			dc_cmd(3,0);	// move to XX_3
			dc_cmd(4,0);
			dc_cmd(1,1);
			dc_cmd(2,1);
			delay_ms(800);
			if((i*1.6)>tar3_time)
			{
				dc_cmd(3,0);	// move to XX_3
				dc_cmd(4,0);
				dc_cmd(1,0);
				dc_cmd(2,0);
				PCout(0) = 1;
				return ;
			}
		}
		
	}
	else if(tar3_flag == 1)
	{
		x_pwm = x2_pwm_data[(long_angle-100)/10];
		y_pwm = y2_pwm_data[(long_angle-100)/10];
		printf("x_pwm %d y_pwm %d",x_pwm,y_pwm);
		
		dc_moter_setspeed(1,x_pwm);
		dc_moter_setspeed(2,y_pwm);
		dc_moter_setspeed(3,x_pwm);
		dc_moter_setspeed(4,y_pwm);
		
		i = 0;
		while(1)
		{
			i++;
			dc_cmd(1,0);	// move to XX_1
			dc_cmd(4,0);
			dc_cmd(2,1);	
			dc_cmd(3,1);
			delay_ms(800);
			
			dc_cmd(2,0);	// move to XX_3
			dc_cmd(3,0);
			dc_cmd(1,1);
			dc_cmd(4,1);
			delay_ms(800);
			
			if((i*1.6)>tar3_time)
			{
				dc_cmd(3,0);	// move to XX_3
				dc_cmd(4,0);
				dc_cmd(1,0);
				dc_cmd(2,0);
				PCout(0) = 1;
				//tar3_time_flag = 0;
				return ;
			}
		}
	}
	
}
Exemplo n.º 13
0
void run1()
{
	u8 ack[2];
	float old_angle,new_angle;
	
	//printf("servlet 1");
	LED1 = 0;
	
	dc_moter_setspeed(2,65000);
	dc_moter_setspeed(4,65000);
	dc_cmd(2,1);
	delay_ms(780);
	dc_cmd(2,0);
	
	dc_cmd(4,1);
	delay_ms(780);
	dc_cmd(4,0);
	
	dc_cmd(2,1);
	delay_ms(780);
	dc_cmd(2,0);
	
	dc_cmd(4,1);
	delay_ms(780);
	dc_cmd(4,0);

	mpu6050_get();
	old_angle = angle[1];
	while(1)
	{
		delay_ms(10);			//By QL 20150814
		mpu6050_get();
		new_angle = angle[1];
		if((new_angle - old_angle)>0)
		{
			dc_cmd(2,1);
			dc_cmd(4,0);
		}
		else if((new_angle - old_angle)<0)
		{
			dc_cmd(4,1);
			dc_cmd(2,0);
		}
		if(new_angle > 15.5)
		{
			Beep(1);
			dc_moter_setspeed(3,50000);
			dc_cmd(1,0);
		}
		if(0 ==NRF24L01_RxPacket(ack))
		{
			Beep(0);
			if(ack[0]  == 's')
			{
				PDout(2)=1;
				dc_cmd(2,0);
				dc_cmd(4,0);
				return;
			}
		}
	}
}
Exemplo n.º 14
0
void un_lock()
{ 
	u8 i=0;
	if(UN_LOCK)
		{
// 			printf("moving\r\n");
		if(NRF_flag == 1)
					{
							if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
							{
								
// 								while(tmp_buf[i]!= '\0')
// 								{
// 									printf("tmp_buf[%d]  %x\r\n",i,tmp_buf[i]);
// 									i++;
// 								}
								i=0;
							NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 
							}
							
		// 			if( tmp_buf[0] != 0xff && tmp_buf[1] != 0xff );
						
					if( tmp_buf[0] == 0xff && tmp_buf[1] == 0xff ) 	
					{
						if(first_unlock)
						{
							Rc_D.THROTTLE  = 0;
							Rc_D.PITCH		 = 0;
							Rc_D.ROLL	 		 = 0;
							first_unlock = 0;
						}
						else
						{
							Rc_D.THROTTLE 		= (vs16)(tmp_buf[4]<<8)|(tmp_buf[5]);
							Rc_D.PITCH			  = (vs16)(tmp_buf[6]<<8)|(tmp_buf[7]);
							Rc_D.ROLL	 		    = (vs16)(tmp_buf[8]<<8)|(tmp_buf[9]);
					
					
// 					printf("--      %d %d %d\r\n",Rc_D.THROTTLE,Rc_D.PITCH,Rc_D.ROLL);
// 					if(Rc_D.THROTTLE != 2083)Power = Rc_D.THROTTLE / 5 -150;
						
					if(Rc_D.THROTTLE >3000)Power =Power + 100;
					if(Rc_D.THROTTLE <1000)Power =Power - 100;		
						Power = Limit_Power(Power,0,999);
					
					if(Rc_D.ROLL == 2073 || fabs(Rc_D.ROLL - 2073)>20)
					{
						Target_y = ( Rc_D.ROLL - 2073 )/500;
					}
					else Target_y = 0;
					
					if(Rc_D.PITCH == 2116 || fabs(Rc_D.PITCH - 2116)>20)
					{
						Target_x = -( Rc_D.PITCH - 2116 )/500;
					}
					else Target_x = 0;
										
					
					NRF_flag = 0;
// 					printf("%d\r\n",NRF_flag);

					TIM_Cmd(TIM4, ENABLE);
					Nrf_Star;
					LED2 =!LED2;	
				}
			}
		}
	
	}
}
Exemplo n.º 15
0
//触摸画板功能演示函数   
void Wireless_Play(void)
{				  	
	u8 err=0,i;		 
	u8 key;	 
	u8 mode;//24L01的模式设置
	u8 tmp_buf[5];//低4个字节,传递坐标值,最高一个字节:0,正常画图,1清除;2,退出;  
	  
	mode=Wireless_Mode_Set();
	if(mode==0)
	{
		SPIx_Init();//设置回原来的				 
		SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
		return;//24L01检测失败,直接退出
	}	 			
	if(mode==2)
	{			    
		Load_Gui_Show("清除","发送","返回");//加载界面 
		TX_Mode();//发送模式
	}else
	{
		Load_Gui_Show("清除","接收","返回");//加载界面 
		RX_Mode();//接收模式
	}
	LCD_Fill(0,0,240,296,LGRAY);//填充灰色 
	POINT_COLOR=BLUE;//设置字体为蓝色  	 
	while(1)
	{	  		   				 
		key=AI_Read_TP(20);//得到触点的状态
		if(mode==1)//接收模式
		{
			if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
			{
				Pen_Point.X=tmp_buf[0];
				Pen_Point.X=(Pen_Point.X<<8)+tmp_buf[1];
 				Pen_Point.Y=tmp_buf[2];
				Pen_Point.Y=(Pen_Point.Y<<8)+tmp_buf[3];
				switch(tmp_buf[4])
				{
					case 0://正常画点
						Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
						break;
					case 1://清除
						LCD_Fill(0,0,240,296,LGRAY);//填充灰色
						break;
					case 2://退出
						Pen_Point.Key_Reg=0;//清除笔状态
						SPIx_Init();//设置回原来的				 
						SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
						return; 
				}	  
			}
		}
		if(key)//触摸屏被按下						  
		{	
			Pen_Point.Key_Reg|=0x80;//标记按下了按键    
			if(Pen_Point.Y<296&&mode==2)//在画图区域内,且为发送模式
			{
				tmp_buf[0]=Pen_Point.X>>8;
				tmp_buf[1]=Pen_Point.X&0xFF;
				tmp_buf[2]=Pen_Point.Y>>8;	 
				tmp_buf[3]=Pen_Point.Y&0xFF; 
				tmp_buf[4]=0;//功能为0,正常画图  
				Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
				err=0;	      
				while(NRF24L01_TxPacket(tmp_buf)!=TX_OK)//等待发送完成
				{
					err++;
					if(err>10)return;//连续超过10次错误,则返回
				}
			}      
		}else if(Pen_Point.Key_Reg&0X80)//按键松开了 
Exemplo n.º 16
0
Arquivo: main.c Projeto: kenziD/ANO
int main(void)
{
    float q[4];
    u8 tmp_buf[32] = {0};
    float test = 0;
    static u8 led_on = 0;

    RCC_HSE_Configuration();
    SysTick_Init();
    NVIC_Configuration();
    USART1_Config(115200);
    LED_Init();
    LED3_Flash(2,100);
    ANO_TC_I2C2_INIT(0xA6, 400000, 1, 1, 3, 3);
    //硬实时
    Tim3_Init(500);//0.005s
    TIM2_Init(999, 0);

    Mpu6050init();
    MOT_GPIO_init();
    MOT_PWM_init();
    Set_PWM(0, 0, 0, 0);
    NRF24L01_Init();
    while (NRF24L01_Check())
    {
        LED2_Flash(2,500000);
    }

    //TX mode
    NRF24L01_Mode_Config(4);
    PID_Init();
    ADC1_Init();
    while (1)
    {
        if (getMpu6050Data == 1)
        {
            //0.01ms?
            Read_Mpu6050();
            Mpu6050_Analyze();
            getMpu6050Data = 0;
        }
        if (calculateAngle == 1)//2ms period
        {
            //0.2ms T
            //LED2_ON;

            //100us
            IMU_Quateration_Update((float)fGYRO_X , (float)fGYRO_Y , (float)fGYRO_Z , (float)fACCEL_X, (float)fACCEL_Y, (float)fACCEL_Z,ypr);
            //LED2_OFF;
            calculateAngle = 0;
        }
        if (sendData == 1)//2ms period
        {
            if(led_on)
            {
                LED2_OFF;
                led_on = 0;
            }
            else
            {
                LED2_ON;
                led_on = 1;
            }

            if (NRF24L01_RxPacket(tmp_buf) == 0)
            {
                //10us
                Rc_Data_Analyze(tmp_buf,&Rc_Data);
            }
            //if wait for the IRQ it need 9ms
            //if not wait for IRQ it runtime need 100us*1.2=0.12ms

            sendSenser((int16_t)fACCEL_X, (int16_t)fACCEL_Y, (int16_t)fACCEL_Z, (int16_t)fGYRO_X, (int16_t) fGYRO_Y, (int16_t)fGYRO_Z, (int16_t)(ypr[0] * 100), (signed short int)(ypr[1] * 100));
            send_wave(32);

            //0.14ms run time
            sendPwmVoltage(&Rc_Data,(uint16_t)(motor0 / 1000.0 * 100), (uint16_t)(motor1 / 1000.0 * 100), (uint16_t)(motor2 / 1000.0 * 100), (uint16_t)(motor3 / 1000.0 * 100));//0.00003974s
            send_wave(32);

            sendData = 0;
        }
        //moveFilterAccData(fACCEL_X, fACCEL_Y, fACCEL_Z, AngleOut);

        if (!strcmp(Rc_Data.status, "stop"))
        {
            Set_PWM(0, 0, 0, 0);
        }
        else if (!strcmp(Rc_Data.status, "start"))
        {
            //LED2_ON;
            expRoll = Rc_Data.roll;
            expPitch = Rc_Data.pitch;
            expThro = Rc_Data.throttle;
            surRoll = ypr[2];
            surPitch = ypr[1];
            PID_Set();
            Set_PWM(motor0, motor1, motor2, motor3);
            //LED2_OFF;
        }
        ////Uart1_Send_PID(320,PID_ROLL.KI,PID_ROLL.KD,1,0,0);
        ////send_wave(32);
        // if (STA == 1)
        // {
        // 	receive_Data();
        // 	STA = 0;
        // 	p = 0;
        // }
    }
}