返回该小组首页 回复主题
nieshen

nieshen

小组等级:     E币:204  (E币换礼)

#1楼主:请问在SimpliciTI串状网络中的RE能同时具有温度采集功能吗?

文章发表于:2008-07-08 10:15

用CC1110,想把RE改成既能转发数据,又能通过芯片内自带的温度传感采集温度,并将温度传送给AP,看了源程序以后觉得RE和ED的程序大同小异,初步的做法是先把节点定义为ED,隔段时间以后又用#undefine取消ED的定义,将之换成RE的定义,重新初始化网络,转发其他节点给它的数据,再隔段时间以后又取消RE的定义,把它换成ED的定义,重新初始化网络,发送本身采集的数据,不知道这样做行不行得通,昨天晚上把程序改得乱七八糟,出了不少ERROR,请问有更好的办法,让RE节点既能转发数据又能发送自身采集的数据吗?谢谢.

nieshen

   小组等级:    E币:204  (E币换礼)

#2

文章发表于:2008-07-08 11:36

刚编了个先是RE后变成ED,其实就是把RE的定义换成ED的定义然后把ED的函数给它嵌进去,结果变ED后没link起,哪位大侠晓得问题出在什么地方/

 

#include "smpl_config.h"
#include "smpl_nwk_config.h"
#include "bsp.h"
#include "mrfi.h"
#include "bsp_leds.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_buttons.h"

#include "mydefine.h"
#include "string.h"

#include "stdio.h"

extern addr_t       sMyRAMAddress;


static void  delay(unsigned long i);
extern void initTempSensor(void);
extern INT8 getTemperature(void);
char temperature[10];

static void linkTo(void);
void toggleLED(uint8_t);


const __root uint8_t date[] = __DATE__;
const __root uint8_t time[] = __TIME__;

#define SPIN_ABOUT_A_SECOND   do { uint16_t spin; for (spin=20; spin; --spin) NWK_DELAY(0xFFFF); } while (0)

void toggleLED(uint8_t);

void main (void)
{
  BSP_Init();

  #ifdef I_WANT_TO_CHANGE_DEFAULT_ROM_DEVICE_ADDRESS_PSEUDO_CODE
  {
    addr_t lAddr;

    createRandomAddress(&lAddr);
    SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr);
  }
#endif // I_WANT_TO_CHANGE_DEFAULT_ROM_DEVICE_ADDRESS_PSEUDO_CODE
  if (BSP_LED1_IS_ON())
  {
    toggleLED(1);
  }
  if(BSP_LED2_IS_ON())
  {
     toggleLED(2);
  }
  initTempSensor();
   //初始化串口
  /*initUART(19200);
  UARTxISRopen();
  ENABLE_ALL_INTERRUPT();
  init_T3();//开启1MS计时器
  nixie_light_int();*/

    while (SMPL_NO_JOIN == SMPL_Init((uint8_t (*)(linkID_t))0))
  {
    toggleLED(1);
    toggleLED(2);
    SPIN_ABOUT_A_SECOND;
  }

 if (!(BSP_LED2_IS_ON()))
  {
    toggleLED(2);
  }
 else if(BSP_LED1_IS_ON())
  {
     toggleLED(1);
  }

#define NUM_CONNECTIONS 0
#define END_DEVICE
#define RX_ALWAYS
#define USE_ADDRESS_FILTERING
while (SMPL_NO_JOIN == SMPL_Init((uint8_t (*)(linkID_t))0))
  {
    toggleLED(1);
    SPIN_ABOUT_A_SECOND;
  }
  linkTo();
  while (1) ;
}

void toggleLED(uint8_t which)
{
  if (1 == which)
  {
    BSP_TOGGLE_LED1();
  }
  else if ((2 == which) || (4 == which))
  {
    BSP_TOGGLE_LED2();
  }
  return;
}

 

 

 

 


static void linkTo()
{
  linkID_t linkID1;
  //uint8_t  msg[FRAMELENTH];
   uint8_t MSGleth = FRAMELENTH;

  // keep trying to link...
  while (SMPL_SUCCESS != SMPL_Link(&linkID1))
  {
    toggleLED(1);
    SPIN_ABOUT_A_SECOND;
  }
  /*display[0] = 22;
  display[1] = 22;
  display[2] = 22;
  display[3] = 18;*/
  // turn off LED.
 // if (BSP_LED1_IS_ON())
  //{
    //toggleLED(1);
 // }
  //uart_state_int();//初始化串口各状态
  //YY
   RestTimer(1);

  while (1)
  {
    // send a message every second. this could be emulating a sleep.
    SPIN_ABOUT_A_SECOND;

    //YY
    INT16 avgTemp = 0;
          for(int i = 0 ; i < 64 ; i++)
          {
            avgTemp += getTemperature();
          }
             avgTemp /= 64;
             //sprintf(temperature, (char *)"%dC", (INT8)avgTemp);
             //UartTX_Send_String(temperature,4);
             //UartTX_Send_word(0x0A);
             //Delay(20000);

 

 

 


     
      
      
                //temp[0] = read_tempterature();
      /*display[1] = temp[0]%10+27;
      display[0] = (temp[0]/10)%10;
                temp[1] = read_photoconductor();
      display[3] = (temp[1]&0x0f);
      display[2] = (temp[1]&0xf0)>>4;*/
      //memcpy((void *)(Uart_R.Buf+9),avgTemp,2);
      Uart_R.Buf[0] = 0x68;
      Uart_R.Buf[1] = 0xaa;
      Uart_R.Buf[2] = 'B';
      Uart_R.Buf[3] = 'C';
      Uart_R.Buf[4] = 'O';
                Uart_R.Buf[9] = (char)avgTemp;
      memcpy((void *)(Uart_R.Buf+5),&sMyRAMAddress,4);
             Uart_S = RXOVER;     
      //INT_ENABLE_T3(1);
     

 


    //msg[0] = 1;
    // msg[1] = ++sTid;
    if((Uart_S == RXOVER)||(Uart_S == TIMEROVER))
    {
      uart_state_int();
     if (SMPL_SUCCESS == SMPL_Send(linkID1, Uart_R.Buf, sizeof(Uart_R.Buf)))
      {
       
    toggleLED(2);
    //yy
    //(temperature, (char *)"%dC", (void *)(Uart_R.Buf+9));
    //UartSendWord(temperature,10);
    //processMessage(Uart_R.Buf, 10);
      }
    }
    if(SMPL_SUCCESS == SMPL_Receive(linkID1,AF_Data.RxBuf,&MSGleth))
    {
     //toggleLED(1);
     //processMessage(AF_Data.RxBuf,MSGleth);
    }
  }
}

static void  delay(unsigned long i)
{
  unsigned long j;
  for(j = 0;j<i;j++);  for(j = 0;j<i;j++);  for(j = 0;j<i;j++);  for(j = 0;j<i;j++);
}

emot

   小组等级:    E币:931  (E币换礼)

#3

文章发表于:2008-07-08 13:44

目前在学习中,不能建言。

nieshen

   小组等级:    E币:204  (E币换礼)

#4

文章发表于:2008-07-15 14:43

SimpliciTI协议的RANGE EXTENDER 的说明里说它可以同时具有ED的功能,但没说具体怎么实现.

scaler001

   小组等级:    E币:107  (E币换礼)

#5

文章发表于:2008-07-16 17:04

请问楼主能否给我发一份SimpliciTI的协议?

邮箱:song_jm@yahoo.cn

以后多交流,祝好!

skyknow

   小组等级:    E币:85  (E币换礼)

#6

文章发表于:2008-07-26 16:46

我觉得预编译指令是在编译源码是才有作用,生成的目标代码下到单片机里是固定的,不会按照你那个意思执行的。

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销