概述
【使用竞赛通用工程实现题目效果(带注释)】
大棚种植区改造过程中提出新的需求,要求部分设备需要支持短距离无线 通讯控制风扇功能,该功能需要选手通过编程自行设计并实现。
任务要求:
- 使用两块黑色 ZigBee 开发板,分别命名为 A、B 并用标签纸贴上。
- 为板 B 上装一个继电器并连接一个风扇。
- 点击板 A 的 SW1 按键可以控制板 B 连接的风扇的启动或停止。
完成以上任务后请做以下步骤:
- 开发完成后请将可以运行此要求的板 A、板 B 安装到答题区,通上电等 待裁判评判。
- 请将完整的工程项目文件保存到U盘“提交资料模块C题2”目录下。
A板
(点击按键SW1->按键扫描消抖->等待按键松开->给B板发送命令)
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 11 // 频道 11~26
#define PAN_ID 0x1111 //网络id
#define MY_ADDR 0x2222 //本机模块地址
#define SEND_ADDR 0x3333 //发送地址
/**************************************************/
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.myAddr = MY_ADDR;
basicRfConfig.ackRequest = TRUE;
while(basicRfInit(&basicRfConfig) == FAILED);
basicRfReceiveOn();
}
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2
#define JD P1_7
void init_All()
{
MCU_IO_DIR_OUTPUT(1,0);
MCU_IO_DIR_OUTPUT(1,1);
MCU_IO_DIR_OUTPUT(1,3);
MCU_IO_DIR_OUTPUT(1,4);
MCU_IO_DIR_OUTPUT(1,7);
D3=D4=D5=D6=JD=0;
MCU_IO_DIR_INPUT(1,2);
}
unsigned char data_send;//定义一个字符型的发送变量
unsigned char deta_recv;//定义一个字符型的接收变量
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
init_All();
while(1)
{
/* user code start */
if(SW1==0)//按键扫描
{
halMcuWaitMs(100);//延时100毫秒
if(SW1==0)
{
while(!SW1);
data_send=1;//发送变量赋值1
basicRfSendPacket(SEND_ADDR,&data_send,1);//发送地址+发送内容+内容字节
}
}
/* user code end */
}
}
B板
(时刻接收A板发送的命令->接收到命令->反转继电器当前状态->控制风扇启停)
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
unsigned char data_send;//定义一个字符型的发送变量
unsigned char deta_recv;//定义一个字符型的接收变量
/*****点对点通讯地址设置******/
#define RF_CHANNEL 11 // 频道 11~26
#define PAN_ID 0x1111 //网络id
#define MY_ADDR 0x3333 //本机模块地址
#define SEND_ADDR 0x2222 //发送地址
/**************************************************/
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.myAddr = MY_ADDR;
basicRfConfig.ackRequest = TRUE;
while(basicRfInit(&basicRfConfig) == FAILED);
basicRfReceiveOn();
}
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2
#define JD P1_7
void init_All()
{
MCU_IO_DIR_OUTPUT(1,0);
MCU_IO_DIR_OUTPUT(1,1);
MCU_IO_DIR_OUTPUT(1,3);
MCU_IO_DIR_OUTPUT(1,4);
MCU_IO_DIR_OUTPUT(1,7);
D3=D4=D5=D6=JD=0;
MCU_IO_DIR_INPUT(1,2);
}
unsigned char data_send;
unsigned char data_recv;
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
init_All();
while(1)
{
/* user code start */
if(basicRfPacketIsReady())//更新接收(如果有信息发出并接收)
{
basicRfReceive(&data_recv,1,NULL)//接收到数据记录为data_recv
if(data_recv==1)//如果接收到的数据为1
{
JD^=1;//切换JD的状态
}
}
/* user code end */
}
}
最后
以上就是动人心情为你收集整理的2021年物联网竞赛-A卷-ZigBee【CC2530】的全部内容,希望文章能够帮你解决2021年物联网竞赛-A卷-ZigBee【CC2530】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复