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(); }
//----------------------------------------------------------------------------- // 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; }
//发送数据包, 发送完成后自动返回监听自己的通道 //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; } } }
//触摸画板功能演示函数 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)//按键松开了
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); } } } }