1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【22物联网国赛样题】zigbee点对点呼吸灯 按键长按双击效果 物联网竞赛今年历年国赛

【22物联网国赛样题】zigbee点对点呼吸灯 按键长按双击效果 物联网竞赛今年历年国赛

时间:2020-04-26 20:31:41

相关推荐

【22物联网国赛样题】zigbee点对点呼吸灯 按键长按双击效果 物联网竞赛今年历年国赛

高职物联网职业技能竞赛国赛样题第一套第一题,zigbee编程

难点:点对点按键呼吸灯维持当前亮度

题目要求

使用两块黑色ZigBee开发板,分别命名为A、B并用标签纸贴上。实现功能:长按板A的SW1键不松开,板B上D4灯可以实现呼吸灯效果。此时松开板A的SW1键,板B上D4灯维持当前亮度。实现功能:连续点击板B的SW1键2次,板A上D4、D3、D6、D5可以实现跑马灯效果。

题目分析

题目并不难,基础的点对点basicrf工程通用就行,先将A板与B板的按键写出来,再编写相对应的响应程序,确保两块板子能通讯上就行。

代码实现

将要实现的功能拆分成一个个函数,先写A板上的发送与接收的相应功能,KeyLong()函数是按键长按的效果,led()为流水灯的效果,RFrec()为接收函数,最后在while中调用各个效果就OK。

/*网络配置*/#define RF_CHANNEL14 // 频道 11~26#define PAN_ID0xaaaa//网络id #define MY_ADDR 0xaa12//本机模块地址#define SEND_ADDR 0xaa21//发送地址char flag=0;char count=0;char rfBuf[32];//接收数据缓冲区void KyeLong() //按键长按{if(P1_2==0){halMcuWaitMs(10);while(P1_2==0){basicRfSendPacket(SEND_ADDR,"A1Start",sizeof("A1Start")); //长按的时候发送halMcuWaitMs(5);}if(P1_2==1){ halMcuWaitMs(20);basicRfSendPacket(SEND_ADDR,"A1Stop",sizeof("A1Stop"));//松开的时候发送}}}void led()//流水灯{halMcuWaitMs(2);count+=1;if(count==100)P1=0x02;if(count==200)P1=0x01;if(count==300)P1=0x10;if(count==400){P1=0x08;count=0;}}void RFrec()//数据接收{if(basicRfPacketIsReady()){basicRfReceive(rfBuf,32,NULL);if(strcmp(rfBuf,"B1Go")==0){flag=!flag;}}if(flag)led();elseP1=0x00;}while(1)//主循环{/* user code start */KyeLong();rec(); /* user code end */}

zigbee板B代码

上面的是A代码,下面的是B板代码,函数效果看注释,最后同样是在while中调用

/*****点对点通讯地址设置******/#define RF_CHANNEL14 // 频道 11~26#define PAN_ID0xaaaa//网络id #define MY_ADDR 0xaa21//本机模块地址#define SEND_ADDR 0xaa12//发送地址void T1_pwm_init{T1CTL|=0X01;PERCFG|=0X40;P1SEL|=0X01;//pwm引脚 /*通道0:主P0.2 备P1.3通道1:主P0.3 备P1.1通道2:主P0.4 备P1.0通道3:主P0.5 备P1.7通道4:主P0.6 备P1.6*///01100100T1CCTL2=0X64;T1CC2L=0XFF;T1CC2H=h;}void KeyDouble()//按键双击发送数据{if(P1_2==0){halMcuWaitMs(10);while(P1_2==0);if(P1_2==1){key_count=0;key_flag=1;mode+=1;}}if(key_flag){halMcuWaitMs(1);key_count++;if(key_count>300){key_flag=0;if(mode==2){basicRfSendPacket(SEND_ADDR,"B1Go",4);}mode=0;}}}void led() //呼吸灯效果{if((T1STAT&0x04)>0){T1STAT=T1STAT&0xfb;if(a==1)h+=1;elseh-=1;T1CC2L=0XFF;T1CC2H=h;if(h>254)a=0;if(h==0)a=1;} void led2() //维持当前亮度{T1CC2L=0XFF;T1CC2H=h;}void rec() //接收函数{if(flag==1)led();if(flag==2)led2();if(basicRfPacketIsReady()){basicRfReceive(rfBuf,32,NULL);if(strcmp(rfBuf,"A1Go")==0){flag=1;}if(strcmp(rfBuf,"A1St")==0){flag=2;}}}while(1){/* user code start */KeyDouble();rec();/* user code end */}

【22物联网国赛样题】zigbee点对点呼吸灯 按键长按双击效果 物联网竞赛今年历年国赛样题真题代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。