无线传输温度和电压

无线传输数据类型

1.定义数据包结构类型

在.h头文件中

 * FUNCTIONS定义数据包的数据结构
 */
typedef union h
{
   unsigned char databuf[18];
   struct RFRXBUF
   {
   unsigned char head[2];//头
   unsigned char type[3];//设备类型
   unsigned char myNWK[4];//节点网络地址
   unsigned char pNWK[4];//父节点网络地址
   unsigned char value[4];//传感器数据
   unsigned char tail  ;//尾
   }BUF ;
}RFTX;

2.在事件函数中添加调用函数

  if ( events & SEND_DATA_EVENT )
  {

    sendTemp();
    sendVdd();
    osal_start_timerEx( GenericApp_TaskID, SEND_DATA_EVENT,5000);

    return (events ^ SEND_DATA_EVENT);
  }

3.温度调用函数(例子)

void sendTemp(void)
{
   RFTX rftx;
   uint16 tempvalue;
   uint16 nwk;
   tempvalue = readTemp();从函数readTemp中获取温度值
   rftx.BUF.value[0]='W';
   rftx.BUF.value[1]=tempvalue/10+'0';
   rftx.BUF.value[2]=tempvalue%10+'0';
   rftx.BUF.value[3]='*';
   osal_memcpy(rftx.BUF.head, "&&", 2);
    if ( //(SampleApp_NwkState == DEV_ZB_COORD) ||
                 (GenericApp_NwkState == DEV_ROUTER)
                   || (GenericApp_NwkState == DEV_END_DEVICE) )
    {
    osal_memcpy(rftx.BUF.type, "END", 3);
    }
   nwk=NLME_GetShortAddr();
   To_string(rftx.BUF.myNWK,(uint8*)&nwk,2);
   
   nwk=NLME_GetCoordShortAddr();
   To_string(rftx.BUF.pNWK,(uint8*)&nwk,2);
   
   rftx.BUF.tail='&';
  afAddrType_t my_DstAddr;
  my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //点播 
  my_DstAddr.endPoint = GENERICAPP_ENDPOINT; 
  my_DstAddr.addr.shortAddr = 0x0000; 
  AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,
                       GENERICAPP_CLUSTERID,
                       18,
                       (uint8*)&rftx,
                       &GenericApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS );
    
}

4.将二进制转换为十六进制,该段是显示节点


void To_string(uint8 *dest,char *src,uint8 length)
{
    uint8 *xad;
    uint8 i=0;
    uint8 ch;
    xad =src + length-1;
    for(i=0;i<length;i++,xad--)
    {
    ch = (*xad >> 4)&0x0F;
    dest[i<<1] = ch +((ch < 10)?'0':'7');
    ch = *xad&0x0F;
    dest[(i<<1)+1] = ch +((ch < 10)?'0':'7');
    
    }


}

5.CC2530自带的温度传感器和电压传感器程序

#include "Sensor.h"
#include <ioCC2530.h>

#define ADC_REF_115V 0X00
#define ADC_DEC_256  0X20
#define ADC_CHN_TEMP 0X0e
#define ADC_DEC_064  0X00
#define ADC_CHN_VDD3 0X0f

//cc2530自带的温度传感器的检测函数
int8 readTemp(void)
{
   static uint16 reference_voltage;
   static uint8 bCalibrate = TRUE;
   unsigned char tmpADCCON3 = ADCCON3;
   uint16 value;
   int8 temp;
   
   ATEST = 0x01;
   TR0 |= 0x01;
   ADCIF = 0;
   ADCCON3 = (ADC_REF_115V | ADC_DEC_256 | ADC_CHN_TEMP);
   while(!ADCIF);
   ADCIF =0;
   value = ADCL;
   value |= ((uint16)ADCH)<<8;
   value >>= 4;
   ADCCON3 = tmpADCCON3;
   if(bCalibrate)
   {
   reference_voltage=value;
   bCalibrate = FALSE;
   }
   temp = 22 + ((value - reference_voltage)/4);
   return temp;

}

unsigned int getVddvalue(void)
{
    unsigned int value;
    unsigned char tmpADCCON3 = ADCCON3;
    ADCIF = 0;
    ADCCON3 = (ADC_REF_115V | ADC_DEC_064 | ADC_CHN_VDD3);
    while(!ADCIF);
    
    value = ADCH;
    ADCCON3 = tmpADCCON3;

    return(value);


}
  • 头文件
#ifndef SENSOR_H
#define SENSOR_H
#include <hal_types.h>


extern int8 readTemp(void);
extern unsigned int getVddvalue(void);



#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值