zigebee中的传感器代码 求高手解释~
void main(void)
{
uint8 APP_SEND_DATA_FLAG = 0; //无线定时发送数据标志
uint8 config_flag[1];
float ADC_VALUE; //定义 这个一个接受传感器数据的值
halBoardInit(); //各种初始化
halUartInit(38400);
HalDmaInit();
HalFlashRead(NV_CONFIG_FLAG, 0, config_flag, sizeof(config_flag));
halUartWrite(config_flag,1); //忘串口写个 1个字节的 config_flag变量
if(config_flag[0] == 0xff) //lpc
{
My_Used_Flash_Init(); //zigbee的通讯地址初始化
halUartWrite("##RESET Flash Valuye!##",strlen("##RESET Flash Valuye!##")) ; //复位
}
ConfigRf_Init();
ConfigRf_send_uart(); // 无线发送到串口
HalFlashRead(NV_CONFIG_FLAG, 0, config_flag, sizeof(config_flag)); // LPC
#if (SENSOR_TYPE==1) //条件编译 如果传感器的型号是1-温湿度传感器
connectionreset();
#else
ADC_INIT(); //ADC初始化,用于光电、酒精、可燃气体
#endif
Timer4_Init(); //定时器4初始化,定时器中断一次的时间是(1/250000*256)s,中断1953次约等于2s
Timer4_On(); //打开定时器4
halLedSet(3);
while(1)
{
uRxlen = 0;
memset_buf(uRxData,sizeof(uRxData));
uRxlen = RecvUartData(uRxData,0);
halMcuWaitMs(5);
if(uRxlen > 0)
{
if((uRxData[0] == 0xFF)&&(uRxData[1] == 0xFA))
{
config_flag[0] = 0x02;
}
else if((uRxData[0] == 0xFF)&&(uRxData[1] == 0xFB))
{
config_flag[0] = 0x03;
}
else if((uRxData[0] == 0xFF)&&(uRxData[1] == 0xFC)&&(uRxData[2] == 0xDD)&&(uRxData[3] == 0xEE))
{
halUartWrite(RetEndConmmand,sizeof(RetEndConmmand));
config_flag[0] = 0x0F;
}
}
halMcuWaitMs(5);
if(config_flag[0] == 0x02)
{
Set_RFInfo_Flash();
ConfigRf_Init(); //lpc 无限收发参数的初始化
}
else if(config_flag[0] == 0x03)
{
Read_RFInfo_Flash();
}
{
config_flag[0] = 0x0F;
APP_SEND_DATA_FLAG = GetSendDataFlag();
if(APP_SEND_DATA_FLAG == 1)
{ //采集传感器数据
#if ((SENSOR_TYPE==0) || (SENSOR_TYPE==3)|| (SENSOR_TYPE==4)|| (SENSOR_TYPE==5))
ADC_VALUE = ADC_GetValue()*3.3/16384/2; //32768
pTxData[4] = (uint8)ADC_VALUE%10 + 48;
pTxData[5] = (uint8)(ADC_VALUE*10)%10 + 48;
pTxData[6] = 0x00;
pTxData[7] = 0x00;
#endif
#if (SENSOR_TYPE==1)
call_sht11();
pTxData[4] = S.DateString1[0];
pTxData[5] = S.DateString1[1];
pTxData[6] = S.DateString1[2];
pTxData[7] = S.DateString1[3];
#endif
#if (SENSOR_TYPE==6)
pTxData[4] = HAL_INT_VAL();
pTxData[5] = 0x00;
pTxData[6] = 0x00;
pTxData[7] = 0x00;
#endif
pTxData[8] = 0;
pTxData[9] = 0;
/***************** SENSOR端发送数据格式说明 *****************
0xFF 0xFD : 为固定数据头 (2 byte)
Type : 为发送数据类型 (1 byte)
len : 为发送数据长度 (1 byte),数据长度不包含固定头、数据类型、校验位
DATA0-DATAn : 为发送的数据 (n byte)
CheckSum : 发送数据校验和 (1 byte),校验和为所有数据相加的低8位
***********************************************************/
pTxData[0] = 0xFF;
pTxData[1] = 0xFD;
pTxData[2]=SENSOR_TYPE;
pTxData[3] = 4;
pTxData[10] = CheckSum(pTxData,10);
basicRfSendPacket(S_ADDR, pTxData,11);
halLedToggle(2);
halMcuWaitMs(pTxData[2]*40); // 各传感器间隔错开
Timer4_On();
}
}
}
} 传感器 Flash 行业数据
[解决办法]
这是定义了几个不同的传感器 采集外部数据串口显示程序 关键是你定义了什么传感器 就执行什么样的代码
[解决办法]
这可以是温湿度传感器,CO传感器,光照传感器,,我不明白 config_flag[1]; 是什么的标志?标志着什么?
[解决办法]
这是定一个标志位数组 存放标志位
[解决办法]
传感器代码能否给我一份带要带注释的。。。
[解决办法]
#if ((SENSOR_TYPE==0)
[解决办法]
(SENSOR_TYPE==3)
[解决办法]
(SENSOR_TYPE==4)
[解决办法]
(SENSOR_TYPE==5))
ADC_VALUE = ADC_GetValue()*3.3/16384/2; //32768
pTxData[4] = (uint8)ADC_VALUE%10 + 48;
pTxData[5] = (uint8)(ADC_VALUE*10)%10 + 48;
pTxData[6] = 0x00;
pTxData[7] = 0x00;
#endif
#if (SENSOR_TYPE==1)
call_sht11();
pTxData[4] = S.DateString1[0];
pTxData[5] = S.DateString1[1];
pTxData[6] = S.DateString1[2];
pTxData[7] = S.DateString1[3];
#endif
#if (SENSOR_TYPE==6)
pTxData[4] = HAL_INT_VAL();
pTxData[5] = 0x00;
pTxData[6] = 0x00;
pTxData[7] = 0x00;
#endif
第一个条件编译宏 是直接取ADC,至于转换协议LZ还要去细看传感器和电路
第二个是SHT11,这是一个IIC的温湿一体的传感器,数据直接读出来就可以了
第三个看样子像是从底层驱动取的外中断,支持某些触发中断信号的传感器