void rf1send(rt_uint8_t * str)
{ 
      rt_kprintf("\r\n \r\n"); 
      TX_Mode();
      rt_kprintf("\r\n RF1 发送数据:%s \r\n", str); 
      NRF24L01_TxPacket(str);
      RX_Mode();
}
Exemple #2
0
//-----------------------------------------------------------------------------
// Main function
//-----------------------------------------------------------------------------
int main(void) {

	WDT_INIT();
	InitMCU();
	initRotary();
	InitUART();
	timer_init();
	rotary__GetValue();
	nRF24L01_Initial();

	// initialize dmx driver
	MDP_SendDimmingReqToMDP(0xff, 0xFF);

	//DMX512Send();
	PORTC = 0x00;

	TCCR1A = 0x00;
	TCCR1B = 0x06;
	TCNT1H = 0xFF;
	TCNT1L = 0xFF;

	TIMSK |= 0x04;

	ZRMSendSetPreconfig(0x15);
	MSLEEP(100);
	ZRMSendReset();
	MSLEEP(1000);

	timer_set(ON_WTD_TIMER_ID, 500);
	timer_set(ON_TEST_TIMER_ID, 3000);

	timer_set(ON_ZIGBEE_PING_TIMER_ID, 3000);
	timer_set(ON_ONTIME_TIMER_ID, 100);
	timer_set(NCP_TIMER_ID, 2000);

	tmp_zrmp.zrm_State = ZRM_INIT;

	xcps_init_zigbee(USART0_Receive, USART0_Transmit);
	xcps_init_rs485(USART1_Receive, USART1_Transmit);
//	FILE mystdout =
	TX_Mode(0);
//			FDEV_SETUP_STREAM((void *)USART0_Transmit, NULL, _FDEV_SETUP_WRITE);
//	stdout = &mystdout;
//
//	DEBUG("\n\r=========START PROGRAM ===========\n\r");
	while (1) {
		ledTask();
		ZigbeeUsartTask();
		NCP_Task();
	}

	return 0;
}
Exemple #3
0
//发送数据包, 发送完成后自动返回监听自己的通道
//0,ok;1,err
 u8 send_pkt(pkt_t * pkt)
{
    u32 t;
    u8 res;
    TX_Mode(&ch);//准备发射//130us
    t = systick;
    do {
        res = NRF24L01_TxPacket((u8 *)pkt);//发送数据 //发送次数超限用时10.7ms//发送成功830us
    }while(res != TX_DS && (systick - t < 10));//20ms内不停尝试//5us 
    RX_Mode(&mych);//最后返回接收模式//100us
    return (res != TX_DS);
}
int main(void)
{
	  SystemClock_HSI(9);    //系统时钟设置,9倍频,36M
    LedInit();						 //LED 初始化	
    Adc_Init();            //摇杆AD初始化
    NRF24L01_Init();       //无线模块初始化
		TX_Mode();						 //发送模式
    TIM4_Init();           //定时器初始化,定时周期为1ms,1ms发送一次摇杆AD值
    KeyInit();             //按键初始化
    TxBuf[30]=0xA5;        //对应遥控器,该位写0xA5,保证飞机能在开机的时候能收到一个完整的32字节的数据包
    GetAD(R_Mode);          
/*******************************************************/
//以下为遥控解锁段         
/*******************************************************/
     while((Throttle>5)||(Roll>5))//解锁条件:油门拉到最低,方向打到最左解锁
        {
          GetAD(R_Mode);//得到各路AD值并显示
        }
        TxBuf[28]=0;   //对应遥控器,该字节写0,使飞机跳过写参数那一步
        TxBuf[27]=0xA5;//解锁飞机
        TxBuf[31]=0xA5;//解锁成功,使能飞控
/*******************************************************/
//解锁完成
/*******************************************************/
    
   Led1=1;
   Led2=1;
   Led3=1;
   Led4=1;
   Led5=0;
  while(1)
		{  

      GetAD(R_Mode);                            //得到各路AD值并显示
      if(Key1==0){TxBuf[10]=0xA5;Led1=1; }//按键子程序,用于设置一键操作,如一键翻滚,一键返航等
      else {TxBuf[10]=0;Led1=0;}
		}
}
void CheckButtons()
{
	P1 |= 0x00;
	if(!(P1 & 0x01))		            // 读取P3^0状态
	{
		delay_ms(20);
		if(!(P1 & 0x01))			    // 读取P3^0状态
		{
			TX_BUF[0] = ~DATA;          // 数据送到缓存
			TX_Mode(TX_BUF);			// 把nRF24L01设置为发送模式并发送数据
			LED = ~DATA;		        // 数据送到LED显示
			Check_ACK(1);               // 等待发送完毕,清除TX FIFO
			delay_ms(250);
			delay_ms(250);
			LED = 0xff;			        // 关闭LED
			RX_Mode();			        // 设置为接收模式
			while(!(P1 & 0x01));
			DATA <<= 1;
			if(!DATA)
				DATA = 0x01;
		}
	}
}
Exemple #6
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)//按键松开了 
Exemple #7
0
void main()			   
{													  
	uchar shujv[8];		
	uchar stop=0;
	uchar cejv=1; 
	uchar flag=0;
	uchar helpcejv=0;	 
	init_io();
	led0=1;led1=1;ledk=1; 
	while(NRF_Check())	 
	{
		led0=0;
		delayms(1000);
		led0=1;
		delayms(1000);								  
	}	
	TX_Mode();		   //设置为发送模式
	/*************自己加的***********************/
	while(CNRF_Check())	 //检查nrf是否存在
	{
		led0=0;
		delayms(1000);
		led0=1;
		delayms(1000);								  
	}	
	CTX_Mode();
	/*************自己加的***********************/
	stop=byte_read(0x2000);		//读取上一次保留的值
	while(1)
	{
			wenshi(shujv); //写入前4个数据
		//	yali(shujv);//写入第5个数据
		//	shache(shujv);//写入第六个数据
	Get_weight();
	if (weight_shiwu/1000<=5)
	shujv[4]='0';
	else shujv[4]='1';


	if(stop==0)		 
		shujv[5]='1';
	if(stop==1)		 
		shujv[5]='0';
		if(out==0)	
		shujv[6]='1';
		else	
		shujv[6]='0';

		//////////////////////////////
			if(NRF24L01_TxPacket(shujv)==TX_OK)	
			{
				led1=0;
				delayms(300);
				led1=1;
				delayms(10);
				/////
				flag=1;
			}
			else flag=0;

	   //////////////////////////////
			if(flag==1)
			{
				if(CNRF24L01_TxPacket(shujv)==TX_OK)	
				{
					led3=0;
					delayms(300);
					led3=1;
					delayms(10);
					cejv=0;		
					helpcejv=0;
				}	
				else  
				{
					helpcejv++;
					delayms(100);
					if(helpcejv>2)
					{  			led2=0;
								delayms(300);
								led2=1;
								delayms(10);
						cejv=0;
						helpcejv=0;	
					}		 
				}
			/////////////////////////////////////////////////
							
			if(shache(cejv,stop)==1)	
			{
					led0=0;
					delayms(300);
					led0=1;
					delayms(10);
			stop=1;							  
			SectorErase(0x2000);
			byte_write(0x2000,stop);
			}
			if(checkbutton(cejv,stop)==0)
			{stop=1;
						
			SectorErase(0x2000);
			byte_write(0x2000,stop);
			}
			}			
	}
}