首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > Wireless >

zigebee中的传感器代码 求好手解释

2013-07-04 
zigebee中的传感器代码 求高手解释~void main(void){uint8 APP_SEND_DATA_FLAG 0 //无线定时发送数据标

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的温湿一体的传感器,数据直接读出来就可以了

第三个看样子像是从底层驱动取的外中断,支持某些触发中断信号的传感器

热点排行