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

📄 sensornodem.nc

📁 基于NesC/TinyOS的无线传感器网络测量节点源码
💻 NC
📖 第 1 页 / 共 2 页
字号:
	call IBADCcontrol.stop();
	call BatteryControl.stop(); 
	call DioControl.stop();
	call Timer2.stop();
	call Timer1.stop();
	call Timer3.stop();
	call HPLUART.stop();
    return SUCCESS;
  }
  
  
 /*---------------------   Events Start from here   ------------------------*/
 
  /****************************************************************************
 * if Uart msg xmitted,Xmit same msg over radio
 * if Radio msg xmitted, issue a new round measuring
 ****************************************************************************/
  event result_t Send.sendDone(TOS_MsgPtr msg, result_t success) {
      uint8_t i;
	  if(!inited){inited = TRUE;}  // System Init, no data storage
      else{
	      if(bufData_tx)            // Sending the buffered data
		    {
			  rstIndex++;
			  if(rstIndex<12){call Timer3.start(TIMER_ONE_SHOT,50);}
			  else{bufData_tx = FALSE;}
			}
		  else                      // Sending everyday data
		    {
			   for(i=0;i<DATA_RESTORE_BYTES;i++)
			     {
				   datastore[measured%12][i] = databuffer[i];
				 }
			   atomic{
	             measured++;
	             if(measured==24) {
	                measured=0;
		            day++;
		            if(day==211){day=0;}
	             }
	           }
			}   
	   }
      return SUCCESS;
  }
  /****************************************************************************
 * Uart msg rcvd. 
 * This app doesn't respond to any incoming uart msg
 * Just return
 ****************************************************************************/
  event TOS_MsgPtr Receive.receive(TOS_MsgPtr data) {
    if(data->data[2]%2==0){
	   Excitation_33(EX_ON);
	   atomic{
	    state = NOECTE;
	    fromExcitation = TRUE;  // Used for EC-TE sensor decision
	    uartBufCount = 0;}
	   call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
       call Leds.redToggle(); 
	} 
	 return data;
  }
  
 /****************************************************************************
 * ADCs Data Ready Routines. 
 * Tell system what to do when data convertion is ready
 * ADC0 to ADC2 will start another convertion, 
 * Battery will start transmission
 ****************************************************************************/
  event result_t Soilsensor0.dataReady( uint16_t data ) {
	atomic {
	databuffer[4] = (uint8_t)((data&0xff00)>>8);
	databuffer[5] = (uint8_t)data;}
	Excitation_25(EX_OFF);
	atomic state = SOILSENSOR1EX;
	call Dio0.high();
	call Timer2.start(TIMER_ONE_SHOT,20);
	return SUCCESS;
  } /* code done */
  
  event result_t Soilsensor1.dataReady( uint16_t data ) {
    atomic {
	databuffer[6] = (uint8_t)((data&0xff00)>>8);
	databuffer[7] = (uint8_t)data;}
	Excitation_25(EX_OFF);
	atomic state = SOILSENSOR2EX;
	call Dio0.low();
	call Dio1.high();
	call Timer2.start(TIMER_ONE_SHOT,20);
	return SUCCESS;
  } /* code done */
  
  event result_t Soilsensor2.dataReady( uint16_t data ) {
    atomic {
	databuffer[8] = (uint8_t)((data&0xff00)>>8);
	databuffer[9] = (uint8_t)data;}
	Excitation_25(EX_OFF);
	atomic state = SOILSENSOR3EX;
	call Dio0.high();
	call Dio1.high();
	call Timer2.start(TIMER_ONE_SHOT,20);
	return SUCCESS;
  } 
  
  
  event result_t Soilsensor3.dataReady( uint16_t data ) {
    atomic {
	databuffer[20] = (uint8_t)((data&0xff00)>>8);
	databuffer[21] = (uint8_t)data;}
	Excitation_25(EX_OFF);
	atomic state = BATTERY;
	call Dio0.low();
	call Dio1.low();
	call Dio2.low();  // Disable ADG0804
	call Timer2.start(TIMER_ONE_SHOT,20);
	return SUCCESS;
  } /* code done */
  
  async event result_t Battery.dataReady(uint16_t data) {
    atomic {
	databuffer[2] = (uint8_t)((data&0xff00)>>8);
	databuffer[3] = (uint8_t)data;} 
	post send_msg();   
    return SUCCESS;
  } /* code done */
  /*--------------------------------------------------------------------------*/
  
 /**
  * UART interrupt handeler
  *
  * @return the buffer with EC-TE data
  **/
  async event result_t HPLUART.get(uint8_t data){
	 if(fromExcitation){
	   if (data != ASCII_CR) {
	     uartBuf[uartBufCount]=data;
		 uartBufCount++;
	   }
	     
	   if((data == ASCII_CR)&&(uartBufCount!=0)) {
	     fromExcitation = FALSE;
		 uartBufCount--;     // obtain current position of uartBuf
		 post dataProcess();
	   }
	 }
	return SUCCESS;
  } /* code done */

  /**
   * Timer Fired Session 
   *
   * Toggle the red LED in response to the <code>Timer.fired</code> event.  
   *
   * @return Always returns <code>SUCCESS</code>
   **/
  event result_t Timer1.fired(){
	   if(!inited){call Timer1.start(TIMER_REPEAT, MEASUREINTERVAL);}
	   Excitation_33(EX_ON);
	   atomic{
	     state = NOECTE;
	     fromExcitation = TRUE;  // Used for EC-TE sensor decision
	     uartBufCount = 0;
		 databuffer[0] = day;
		 databuffer[1] = measured;
	   }
	   call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
	   call Leds.redToggle();
     return SUCCESS;
  }
  
  /**
  *  Timer2 Fired Session
  *
  *  Wait 2 seconds if not stopped, than start getting sample
  *
  *  @return Always return SUCCESS
  **/
  event result_t Timer2.fired()
  { 
	switch(state) {
	  case NOECTE:        Excitation_33(EX_OFF);
	                       atomic {state = SOILSENSOR0EX;
						           fromExcitation = FALSE;}
	                       call Dio2.high();                        // Enable ADG0804
	                       call Timer2.start(TIMER_ONE_SHOT,20);
						   break;
	  case SOILSENSOR0EX: Excitation_25(EX_ON);
	                       call Timer2.start(TIMER_ONE_SHOT,15);
						   state = SOILSENSOR0GD;
				           break;
	  case SOILSENSOR0GD: call Soilsensor0.getData();
	                       break;
	  case SOILSENSOR1EX: Excitation_25(EX_ON);
	                       call Timer2.start(TIMER_ONE_SHOT,15);
						   state = SOILSENSOR1GD;
						   break;
	  case SOILSENSOR1GD: call Soilsensor1.getData();
	                       break;	
      case SOILSENSOR2EX: Excitation_25(EX_ON);
	                       call Timer2.start(TIMER_ONE_SHOT,15);
						   state = SOILSENSOR2GD;
						   break;
      case SOILSENSOR2GD: call Soilsensor2.getData();
	                       break;
      case SOILSENSOR3EX: Excitation_25(EX_ON);
	                       call Timer2.start(TIMER_ONE_SHOT,15);
                           state = SOILSENSOR3GD;
                           break;
      case SOILSENSOR3GD: call Soilsensor3.getData();
                           break;	
      case BATTERY:       call Battery.getData();
                           state = SOILSENSOR0EX;
                           break;		   
	  default: break;
	}
	return SUCCESS;
  }
  
  event result_t Timer3.fired()
  {
	uint8_t i;
	if(bufData_tx)
	  {
	     for(i=0;i<DATA_RESTORE_BYTES;i++)
			 {
			     databuffer[i] = datastore[rstIndex][i];
			 }
		 post send_msg();
	  }
	else
	  {
	    call Leds.yellowToggle();
	    Excitation_33(EX_ON);
	    atomic{
	      state = NOECTE;
	      fromExcitation = TRUE;    // Used for EC-TE sensor decision
	      uartBufCount = 0;}
	    call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
	    call Leds.redToggle();
	  }
	return SUCCESS;
  }
  
  event async result_t HPLUART.putDone()
  {
	return SUCCESS;
  }
  
  

  event result_t Dio0.dataReady(uint16_t data) {
      return SUCCESS;
  }
  
   event result_t Dio1.dataReady(uint16_t data) {
      return SUCCESS;
  }

  event result_t Dio0.dataOverflow() {
      return SUCCESS;
  }

  event result_t Dio1.dataOverflow() {
      return SUCCESS;
  }
  
  event result_t Dio2.dataReady(uint16_t data) {
      return SUCCESS;
  } 
   
  event result_t Dio2.dataOverflow() {
      return SUCCESS;
  }
  
  event result_t Dio3.dataOverflow() {
      return SUCCESS;
  }
  
  event result_t Dio3.dataReady(uint16_t data) {
      if(inited){
	  if(!bufData_tx){
	    bufData_tx = TRUE;
		rstIndex = 0;
		call Timer3.start(TIMER_ONE_SHOT,50);
	  } 
	  }
      return SUCCESS;
  }
  
  event result_t Dio4.dataOverflow() {
      return SUCCESS;
  }
  
  event result_t Dio4.dataReady(uint16_t data) {
      if(inited){
        call Timer3.start(TIMER_ONE_SHOT,500);
	  }
      return SUCCESS;
  }
}

⌨️ 快捷键说明

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