⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实现rssi信号的16个node节点采集程序.txt

📁 16个节点采集信息
💻 TXT
字号:
(实现RSSI信号的16个Node节点采集,请注意对应的文件名,烧制时注意节点ID号。以下是完整的Node节点程序。)   

--------------------------------------------------------------------------------
/******************************************************************** 
        Copyright (C), 2006-2007, by Enoch. 
        FileName:       Rssi.h  
        Description:    Hardware specific definitions for the MTS300/310. 
*********************************************************************/ 

enum 
{ 
    INITIAL_TIMER_RATE      = 1000, 
    INITIAL_TIMER_REAE_STEP = 8, 
    INITIAL_TIMER_DELAY     = 1500 
}; 

enum 
{ 
    BASE_NODE = 0, 
    MOVE_NODE = 100, 
}; 

/******************************************************************** 
        Copyright (C), 2006-2007, by Enoch. 
        FileName:        Rssi.nc  
        Description:    RSSI tracking system.
*********************************************************************/ 

includes RssiMsg;
includes Rssi; 

configuration Rssi
{
} 

implementation
{
  components Main, RssiM, TimerC, GenericComm as Comm, LedsC; 

  Main.StdControl -> RssiM;
  Main.StdControl -> Comm; 

  RssiM.TimerSend -> TimerC.Timer[unique("timer")];
  RssiM.Sendtest -> Comm.SendMsg[RSSI];
  RssiM.Receivetest -> Comm.ReceiveMsg[RSSI];
  RssiM.UARTSend -> Comm.SendMsg[RSSI+2];
  RssiM.Leds -> LedsC;
} 

/******************************************************************** 
        Copyright (C), 2006-2007, by Enoch. 
        FileName:       RssiMsg.h  
        Description:    RSSI tracking system. 
*********************************************************************/ 

enum 
{ 
    TOTAL_NODE = 16 
}; 

typedef struct RssiMsg 
{ 
    uint8_t addr; 
    uint16_t seq; 
}RssiMsg; 

typedef struct NodeUARTMsg 
{    
    uint8_t fromaddr; 
    uint8_t rssi; 
    uint16_t seq; 
}NodeUARTMsg; 

typedef struct UARTMsg 
{    
    uint8_t rssi[TOTAL_NODE]; 
    uint16_t seq; 
}UARTMsg; 

enum 
{ 
    RSSI = 44, 
}; 

/******************************************************************** 
        Copyright (C), 2006-2007, by Enoch. 
        FileName:       RssiM.nc  
        Description:    RSSI tracking system. 
*********************************************************************/ 

includes RssiMsg; 
includes Rssi; 

module RssiM 
{ 
     provides interface StdControl; 
     uses 
     { 
         interface Timer as TimerSend; 
         interface SendMsg as Sendtest; 
         interface ReceiveMsg as Receivetest; 
         interface SendMsg as UARTSend; 
         interface Leds; 
     } 
} 

implementation 
{ 
    TOS_Msg MoveData, UARTSendData, MoteSendData; 
    uint8_t rssi_value[TOTAL_NODE]; 
    uint16_t seq = 0; 
    uint32_t i = 0; 
    task void SendData() 
    { 
        call UARTSend.send(TOS_UART_ADDR, sizeof(UARTMsg), &UARTSendData); 
    } 
    task void SendNodeData() 
    { 
        call Sendtest.send(TOS_BCAST_ADDR, sizeof(RssiMsg), &MoveData); 
    } 
     command result_t StdControl.init() 
     { 
         call Leds.init(); 
         call Leds.greenOn(); 
         for (i = 0; i < TOTAL_NODE; i++) 
        { 
            rssi_value = 255; 
        } 
         seq = 0; 
         return SUCCESS; 
     } 

     command result_t StdControl.start() 
     {    
         /* Moving node start the timer */ 
         if (TOS_LOCAL_ADDRESS == MOVE_NODE) 
         { 
             call TimerSend.start(TIMER_REPEAT, INITIAL_TIMER_RATE); 
             call Leds.greenToggle(); 
             call Leds.redToggle(); 
         } 
         else if (TOS_LOCAL_ADDRESS == BASE_NODE) 
         { 
             seq = 1; 
         } 
         return SUCCESS; 
     } 

     command result_t StdControl.stop() 
     { 
         if (TOS_LOCAL_ADDRESS == MOVE_NODE) 
         { 
             call TimerSend.stop(); 
         } 
         return SUCCESS; 
     } 
     event result_t TimerSend.fired() 
     { 
         /* Moving node send message */ 
         if (TOS_LOCAL_ADDRESS == MOVE_NODE) 
         { 
             RssiMsg* snd_msg = (RssiMsg*)MoveData.data; 
            // Data 
             snd_msg->addr = TOS_LOCAL_ADDRESS; 
             snd_msg->seq  = ++seq; 
             call Sendtest.send(TOS_BCAST_ADDR, sizeof(RssiMsg), &MoveData); 
             call Leds.yellowToggle(); 
         } 
         return SUCCESS; 
     } 

     event result_t Sendtest.sendDone(TOS_MsgPtr msg, result_t success) 
     { 
          call Leds.yellowToggle(); 
          return SUCCESS; 
     } 
    /* Motes Reciece Message */ 
     event TOS_MsgPtr Receivetest.receive(TOS_MsgPtr msgptr) 
     { 
         /* BASE mote recieve message to UART */ 
         if (TOS_LOCAL_ADDRESS == BASE_NODE) 
         { 
             NodeUARTMsg* node_uart_msg = (NodeUARTMsg*)msgptr->data; 
             UARTMsg* uart_msg = (UARTMsg*)UARTSendData.data; 
             RssiMsg* snd_msg = (RssiMsg*)MoveData.data; 
             uint8_t node_addr  = node_uart_msg->fromaddr; 
             uint16_t node_seq  = node_uart_msg->seq; 
             uint8_t max_rssi = 255; 
             uint16_t max_node = 0; 
             if (((RssiMsg*)msgptr->data)->addr == MOVE_NODE) 
             { 
                 if (((RssiMsg*)msgptr->data)->seq > 0) 
                 { 
                     /* Select the max rssi value node */ 
                     for (i = 0; i < TOTAL_NODE; i++) 
                     { 
                         uart_msg->rssi = rssi_value; 
                     } 
                    // Data 
                     uart_msg->seq = node_seq; 
                     /* Upstream the data */     
                     //call UARTSend.send(TOS_UART_ADDR, sizeof(RssiMsg), &MoveData); 
                     //call UARTSend.send(TOS_UART_ADDR, sizeof(UARTMsg), &UARTSendData); 
                     post SendData(); 
                     //post SendNodeData(); 
                     //call Sendtest.send(TOS_BCAST_ADDR, sizeof(RssiMsg), &MoveData); 
                     for (i = 0; i < TOTAL_NODE; i++) 
                     { 
                         rssi_value = 255; 
                     } 
                     rssi_value[node_addr-1] = node_uart_msg->rssi; 
                     //call Leds.redToggle(); 
                 } 
                 return msgptr; 
             } 
             else 
             { 
                 /* data is recieved for saving */ 
                 rssi_value[node_addr-1] = node_uart_msg->rssi; 
                 //call Leds.greenToggle(); 
             }    
         } 
         /* Node proccess */ 
         else if (TOS_LOCAL_ADDRESS > BASE_NODE && TOS_LOCAL_ADDRESS != MOVE_NODE) 
         { 
             RssiMsg* recv_rssi_msg = (RssiMsg*)msgptr->data; 
             NodeUARTMsg* send_mote_msg = (NodeUARTMsg*)MoteSendData.data; 
             if (recv_rssi_msg->addr == MOVE_NODE) 
             { 
                 send_mote_msg->fromaddr = TOS_LOCAL_ADDRESS; 
                  send_mote_msg->rssi = (int8_t)msgptr->strength; 
                  send_mote_msg->seq  = recv_rssi_msg->seq; 
                  /* Delay send to base mote */ 
                  for (i = 0; i < TOS_LOCAL_ADDRESS * INITIAL_TIMER_DELAY; i++) 
                 call Sendtest.send(BASE_NODE, sizeof(NodeUARTMsg), &MoteSendData); 
              } 
              else if (recv_rssi_msg->addr == BASE_NODE) 
              { 
                  if (recv_rssi_msg->seq == TOS_LOCAL_ADDRESS) 
                  { 
                      call Leds.redOn(); 
                  } 
                  else 
                  { 
                      call Leds.redOff(); 
                  } 
              }    
         } 
         return msgptr; 
     } 
    // UART Send Message 
       event result_t UARTSend.sendDone(TOS_MsgPtr msg, result_t success) 
     { 
         //call Leds.yellowToggle(); 
          return SUCCESS; 
     } 
} 

/******************************************************************** 
        Copyright (C), 2006-2007, by Enoch. 
        FileName:       Makefile  
        Description:    RSSI tracking system. 

*********************************************************************/ 

COMPONENT = Rssi 

XBOWROOT=%T/../contrib/xbow/tos 

PFLAGS= -I$(XBOWROOT)/platform/micaz 

# For MICA2 and MICA2DOT 
#PFLAGS+= -I../../tos/platform/mica2 -I../../tos/CC1000RadioAck -I../../tos/lib/ReliableRoute -I%T/lib/Queue -I%T/lib/Broadcast -I%T/lib/Attributes 

# For MICAZ 
PFLAGS+= -I../../beta/tos/lib/CC2420Radio -I%T/lib/Broadcast -I%T/lib/Attributes 

include ../MakeXbowlocal 
include ${TOSROOT}/tools/make/Makerules

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -