#1楼主:请问在SimpliciTI串状网络中的RE能同时具有温度采集功能吗?
文章发表于:2008-07-08 10:15
用CC1110,想把RE改成既能转发数据,又能通过芯片内自带的温度传感采集温度,并将温度传送给AP,看了源程序以后觉得RE和ED的程序大同小异,初步的做法是先把节点定义为ED,隔段时间以后又用#undefine取消ED的定义,将之换成RE的定义,重新初始化网络,转发其他节点给它的数据,再隔段时间以后又取消RE的定义,把它换成ED的定义,重新初始化网络,发送本身采集的数据,不知道这样做行不行得通,昨天晚上把程序改得乱七八糟,出了不少ERROR,请问有更好的办法,让RE节点既能转发数据又能发送自身采集的数据吗?谢谢.
#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++);
}
#4
文章发表于:2008-07-15 14:43
SimpliciTI协议的RANGE EXTENDER 的说明里说它可以同时具有ED的功能,但没说具体怎么实现.
#5
文章发表于:2008-07-16 17:04
请问楼主能否给我发一份SimpliciTI的协议?
邮箱:song_jm@yahoo.cn
以后多交流,祝好!
#6
文章发表于:2008-07-26 16:46
我觉得预编译指令是在编译源码是才有作用,生成的目标代码下到单片机里是固定的,不会按照你那个意思执行的。