basicRF双向灯光控制
Posted yuling520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了basicRF双向灯光控制相关的知识,希望对你有一定的参考价值。
题目:
实现基于BasicRF无线点对点通信的双向灯光控制,具体要求如下:
1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义。
<2> 按下节点A的SW1按键,松开后,向节点B发送1个字节的无线数据。节点B接收到新的无线数据后,判断该数据如果为0xa2,则切换节点B中D4灯的开关状态。
<3> 按下节点B的SW1按键,松开后,向节点A发送1个字节的无线数据。节点A接收到新的无线数据后,判断该数据如果为0xa2,则切换节点A中D4灯的开关状态。
注:<1> D4灯,连接到CC2530的P1_1引脚。
<2> SW1按键;连接到CC2530的P1_2引脚。
配置点对点无线通信的基本参数
#define RF_CHANNEL 17 // 频道 11~26 #define PAN_ID 0x1234 //网络id
配置节点信息
//节点A的地址信息 #define MY_ADDR 0x000a //本机模块地址 #define SEND_ADDR 0x000b //发送地址 //节点B的地址信息 //#define MY_ADDR 0x000b //本机模块地址 //#define SEND_ADDR 0x000a //发送地址
变量定义与函数声明
#define D4 P1_1 #define SW1 P1_2 unsigned char cmd = 0xa2; //无线发送的命令字 unsigned char dat = 0; //无线接收的数据 void Init_Port(); //初始化D4灯与SW1按键 void Delay(unsigned char t); //普通延时函数 void Scan_Keys(); //按键扫描处理函数 void Recv_RF_Data(); //无线数据接收处理函数
端口初始化函数的实现
void Init_Port() { //初始化D4灯和D5灯的端口P1_1 P1SEL &= ~0x02; //P1_1为通用I/O端口 P1DIR |= 0x02; //P1_1端为输出口 //初始化SW1按键的端口P1_2 P1SEL &= ~0x04; //P1_2为通用I/O端口 P1DIR &= ~0x04; //P1_2端为输出口 P1INP &= ~0x04; //P1_2设置为上拉/下拉模式 P2INP &= ~0x40; //P1_2设置为上拉 D4 = 0; }
延时函数
void Delay(unsigned char t) { while(t--); }
按键扫描函数
void Scan_Keys() { if(SW1 == 0) { Delay(100); if(SW1 == 0) //确定SW1按键按下 { while(SW1 == 0); //等待SW1按键松开 basicRfSendPacket(SEND_ADDR, &cmd, 1); } } }
无线数据接收处理函数的实现
void Recv_RF_Data() { if(TRUE == basicRfPacketIsReady()) //接收到新的无线数据 { basicRfReceive(&dat, 1, NULL); //读出1个字节数据到dat变量 if(dat == 0xa2) //判断接收数据是否为0xa5 { D4 = ~D4; //切换D4灯的开关状态 dat = 0x00; } } }
主函数的实现
void main(void) { halBoardInit();//选手不得在此函数内添加代码 ConfigRf_Init();//选手不得在此函数内添加代码 Init_Port(); //初始化D4灯和SW1按键的端口 while(1) { /* user code start */ Scan_Keys(); //扫描处理按键 Recv_RF_Data(); //接收处理无线数据 /* user code end */ } }
以上是关于basicRF双向灯光控制的主要内容,如果未能解决你的问题,请参考以下文章
通过物联网平台和灯光设备实现灯光的智能控制,主要实现了通过语音控制灯光颜色的变化灯光每种颜色的占比日出日落模式等等,底层封装为