예제 #1
0
파일: Node.c 프로젝트: dkaliyev/EnvSens
static void alarmCallback()
{
	static struct RTC_time t_now;
	static struct unicast_message *tmp, sMsg;
	static struct sensor_data sens_data;
	static uint16_t samplingDelay = 280;
	static uint16_t delay = 40; // ADC requires minimum 20 us of sampling time.
	static uint16_t sleepDelay = 9680;
	static uint16_t avg;
	static uint8_t count = 0;
	if(count==0)
	RTC_getTime(&t_now);
	int len;
	uint8_t i, numSampl = 20;

	static uint16_t v = 0, v1;

	ioPins_configurePin(8, USEGPIO, OUTPUT, NOPULLUP, HYSTERESIS_OFF);
	ioPins_configurePin(7, USEGPIO, OUTPUT, NOPULLUP, HYSTERESIS_OFF);
	ioPins_setValue(8, 1);
	ioPins_setValue(7, 1);
	

	avg = 0;
	for(i=0;i<numSampl;i++)
	{
		ioPins_setValue(8, 0);
		clock_delay_usec(samplingDelay);
		v = ioPins_getValue(16);
		avg+=v;
		clock_delay_usec(delay);
		ioPins_setValue(8, 1);
		clock_delay_usec(sleepDelay);
		
	}
	
	sens_data.lraw[count] = avg&0xFF;
	sens_data.hraw[count] = (avg&0xFF00)>>8;
	
  	if(count==59)
  	{
  		sMsg.id = id;
	  	sMsg.type = DATA_REQ;
	  	sMsg.time = t_now;
	  	strcpy(sMsg.name, "Dust sensor\0");
	  	sMsg.data = sens_data;
	  	sMsg.numSampl = numSampl;
	  	packetbuf_copyfrom(&sMsg, sizeof(struct unicast_message));
		unicast_send(&unicast, &nmaddr);
		count = 0;
	}
	else
	{
		count++;
	}
}
예제 #2
0
파일: sht21.c 프로젝트: Ayesha-N/6lbr
/*---------------------------------------------------------------------------*/
uint8_t sht21_read(uint16_t * data, uint8_t regist)
{
  uint16_t temp;
  uint8_t dataByte[2];
  if(regist != SHT21_TEMP_REGISTER && regist != SHT21_HUMI_REGISTER) {
    return -1;
  }

  i2c_master_set_slave_address(SHT21_SLAVE_ADDRESS, I2C_SEND);
  i2c_master_data_put(regist);
  i2c_master_command(I2C_MASTER_CMD_BURST_SEND_START);
  while (i2c_master_busy()) {
  }
  if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
    if(regist == SHT21_TEMP_REGISTER) {
      for (temp = 0; temp < 10; temp++) {
        clock_delay_usec(8500); //85ms
      }
    } else if(regist == SHT21_HUMI_REGISTER) {
      for (temp = 0; temp < 10; temp++) {
        clock_delay_usec(2900); //29ms
      }
    }
    /* Get the 2 bytes of data*/
    /* Data MSB */
    i2c_master_set_slave_address(SHT21_SLAVE_ADDRESS, I2C_RECEIVE);
    i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_START);
    while (i2c_master_busy()) {
    }
    if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
      *data = i2c_master_data_get() << 8;

      /* Data LSB */
      i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_CONT);
      while (i2c_master_busy()) {
      }
      if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
        *data |= i2c_master_data_get();

        /* Checksum */
        i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
        while (i2c_master_busy()) {
        }
        if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
          dataByte[0] = (*data) >> 8;
          dataByte[1] = (*data) & 0x00FF;
          if(sht21_check_crc(dataByte, 2,
              i2c_master_data_get()) == I2C_MASTER_ERR_NONE) {
            return I2C_MASTER_ERR_NONE;
          }
        }
      }
void onewire_reset(void) 
{
  OUT_DQ(); 
  CLR_DQ();
  clock_delay_usec(480);
  SET_DQ();
  clock_delay_usec(60);
  IN_DQ();
  clock_delay_usec(10);
  while(!(GET_DQ()));
  OUT_DQ();
  SET_DQ();
}
예제 #4
0
/*---------------------------------------------------------------------------*/
static void
floppin(uint8_t port, uint8_t pin)
{
  uint8_t i;
  GPIO_CLR_PIN(GPIO_PORT_TO_BASE(port), GPIO_PIN_MASK(pin));
  clock_delay_usec(500);
  for(i = 0; i < 50; i++) {
    GPIO_SET_PIN(GPIO_PORT_TO_BASE(port), GPIO_PIN_MASK(pin));
    clock_delay_usec(500);
    GPIO_CLR_PIN(GPIO_PORT_TO_BASE(port), GPIO_PIN_MASK(pin));
    clock_delay_usec(500);
  }
}
예제 #5
0
/* -------------------------------------------------------------------------- */
static int8_t
pm_get_ack(void)
{
  uint16_t error = PM_ERROR;
  PM_CMD_AS_INPUT;
  clock_delay_usec(PM_3_MILISECOND);
  if(PM_CMD_LINE_READ) {
    error = PM_SUCCESS;
  }

  clock_delay_usec(PM_10_MILISECOND);
  PM_CMD_AS_OUTPUT;
  return error;
}
예제 #6
0
/*---------------------------------------------------------------------------*/
int
mp3_wtv020sd_reset(void)
{
  if(initialized != MP3_WTV020SD_LINE_MODE) {
    return MP3_WTV020SD_ERROR;
  }
  GPIO_CLR_PIN(MP3_CLK_PORT_BASE, MP3_CLK_PIN_MASK);
  GPIO_SET_PIN(MP3_RESET_PORT_BASE, MP3_RESET_PIN_MASK);
  GPIO_CLR_PIN(MP3_RESET_PORT_BASE, MP3_RESET_PIN_MASK);
  clock_delay_usec(MP3_USEC_DELAY);
  GPIO_SET_PIN(MP3_RESET_PORT_BASE, MP3_RESET_PIN_MASK);
  GPIO_SET_PIN(MP3_CLK_PORT_BASE, MP3_CLK_PIN_MASK);
  clock_delay_usec(MP3_USEC_RESET_DELAY);
  return MP3_WTV020SD_SUCCESS;
}
예제 #7
0
파일: i2c.c 프로젝트: 13416795/contiki
/*---------------------------------------------------------------------------*/
void
i2c_master_command(uint8_t cmd)
{
  REG(I2CM_CTRL) = cmd;
  /* Here we need a delay, otherwise the I2C module keep the receiver mode */
  clock_delay_usec(1);
}
예제 #8
0
void I2C_Start(void)
{
    SDA=1;
    SCL=1;
    clock_delay_usec(1);
    SDA=0;
    SCL=0;
}
예제 #9
0
void Sendack(uint8_t h)
{
    SCL=0;
    SDA=h&0x01;
    SCL=1;
    clock_delay_usec(1);
    SCL=0;
}
예제 #10
0
void write(unsigned char start, unsigned char ddata) //写指令或数据
{
	unsigned char start_data,Hdata,Ldata;
	if(start == COMMAND)
		start_data = 0xf8;  //写指令
	else      
		start_data = 0xfa;  //写数据

	Hdata = ddata&0xf0;    //取高四位
	Ldata = (ddata<<4)&0xf0;  //取低四位
	sendbyte(start_data);   //发送起始信号
	clock_delay_usec(100); //延时是必须的
	sendbyte(Hdata);       //发送高四位
	clock_delay_usec(100);  //延时是必须的
	sendbyte(Ldata);    //发送低四位
	clock_delay_usec(100);  //延时是必须的
}
예제 #11
0
파일: nrf51822.c 프로젝트: lab11/atum
void nrf51822_interrupt(uint8_t port, uint8_t pin)
{
  uint16_t b;
  uint8_t buf[256];
  int i;

  leds_toggle(LEDS_RED);


  spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);
  // READ_IRQ
  SPI_WRITE(0x01);
  SPI_FLUSH();

SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);

clock_delay_usec(75);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);



  SPI_READ(b);

  if (b == 0xFF) {
    // ERROR on the nrf51822 side. Skip this.

  } else {

    for (i=0; i<b; i++) {
      SPI_READ(buf[i]);
    }

  }


  SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);


}
예제 #12
0
void
delay_msec(uint16_t howlong)
{
#if F_CPU>=16000000
  while(howlong--) clock_delay_usec(1000);
#elif F_CPU>=8000000
  uint16_t i=996;
  while(howlong--) {clock_delay_usec(i);i=999;}
#elif F_CPU>=4000000
  uint16_t i=992;
  while(howlong--) {clock_delay_usec(i);i=999;}
#elif F_CPU>=2000000
  uint16_t i=989;
  while(howlong--) {clock_delay_usec(i);i=999;}
#else
  uint16_t i=983;
  while(howlong--) {clock_delay_usec(i);i=999;}
#endif
}
예제 #13
0
/*---------------------------------------------------------------------------*/
int
mp3_wtv020sd_gpio_next(void)
{
  if(initialized != MP3_WTV020SD_GPIO_MODE) {
    return MP3_WTV020SD_ERROR;
  }
  GPIO_CLR_PIN(MP3_PLAY_PORT_BASE, MP3_PLAY_PIN_MASK);
  clock_delay_usec(MP3_USEC_DELAY);
  GPIO_SET_PIN(MP3_PLAY_PORT_BASE, MP3_PLAY_PIN_MASK);
  return MP3_WTV020SD_SUCCESS;
}
예제 #14
0
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(ac_dimmer_int_process, ev, data)
{
  PROCESS_EXITHANDLER();
  PROCESS_BEGIN();

  int dimtime;

  while(1) {
    PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
    dimtime = (uint8_t)(100 - dimming);
    dimtime *= 100;

    /* Off cycle */
    clock_delay_usec(dimtime);
    GPIO_SET_PIN(DIMMER_GATE_PORT_BASE, DIMMER_GATE_PIN_MASK);
    /* Triac on propagation delay */
    clock_delay_usec(DIMMER_DEFAULT_GATE_PULSE_US);
    GPIO_CLR_PIN(DIMMER_GATE_PORT_BASE, DIMMER_GATE_PIN_MASK);
  }
  PROCESS_END();
}
예제 #15
0
/*---------------------------------------------------------------------------*/
int
mp3_line_command(uint16_t cmd)
{
  uint16_t mask;
  if(initialized != MP3_WTV020SD_LINE_MODE) {
    return MP3_WTV020SD_ERROR;
  }
  GPIO_CLR_PIN(MP3_CLK_PORT_BASE, MP3_CLK_PIN_MASK);
  clock_delay_usec(MP3_USEC_CMD_DELAY / 10);
  for(mask = 0x8000; mask > 0; mask >> 1) {
    GPIO_CLR_PIN(MP3_CLK_PORT_BASE, MP3_CLK_PIN_MASK);
    clock_delay_usec(MP3_USEC_CMD_DELAY / 2);
    if(cmd & mask) {
      GPIO_SET_PIN(MP3_DATA_PORT_BASE, MP3_DATA_PIN_MASK);
    } else {
      GPIO_CLR_PIN(MP3_DATA_PORT_BASE, MP3_DATA_PIN_MASK);
    }
    clock_delay_usec(MP3_USEC_CMD_DELAY / 2);
    GPIO_SET_PIN(MP3_CLK_PORT_BASE, MP3_CLK_PIN_MASK);
    clock_delay_usec(MP3_USEC_CMD_DELAY);
    if(mask > 0x0001) {
      clock_delay_usec(MP3_USEC_CMD_DELAY / 10);
    }
  }
  clock_delay_usec(MP3_USEC_CMD_DELAY / 8);
  return MP3_WTV020SD_SUCCESS;
}
예제 #16
0
파일: fm25v02.c 프로젝트: lab11/G2
void fm25v02_dummyWakeup(){
	uint8_t dummyReg;
	//uint16_t dummyCnt;
	spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);
	SPI_CS_CLR(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
	// Delay for 400-ish us
	clock_delay_usec(400);
	//for (dummyCnt=0; dummyCnt<800; dummyCnt++)
	//	asm("nop");
	SPI_FLUSH();
	SPI_READ(dummyReg);
	SPI_CS_SET(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
}
uint8_t onewire_read(void)
{
  uint8_t data = 0;
  int i;

  for (i = 0; i < 8; i++)
    {
      OUT_DQ();
      CLR_DQ();
      data = data >> 1;
      SET_DQ();
      IN_DQ();
      clock_delay_usec(8);
      if(GET_DQ())
        data |= 0x80;
      OUT_DQ();
      SET_DQ();
      clock_delay_usec(60);
    }

  return data;
}
예제 #18
0
/* -------------------------------------------------------------------------- */
static int8_t
pm_send_cmd(uint8_t cmd)
{
  uint8_t i;

  PRINTF("PM: cmd %u\n", cmd);

  /* Enter command mode */
  PM_CMD_LINE_SET;
  clock_delay_usec(PM_1_MILISECOND);
  PM_CMD_LINE_CLR;

  /* Send command */
  for (i = PM_MAX_BITS; i > 0; i--) {
    clock_delay_usec(PM_1_MILISECOND);

    if (cmd & PM_NUMBITS(i)) {
      PM_CMD_LINE_SET;
    }
    else PM_CMD_LINE_CLR;
  }

  clock_delay_usec(PM_1_MILISECOND);
  PM_CMD_LINE_CLR;

  /* Receive command reply if any */
  if((cmd == PM_CMD_GET_STATE)  || (cmd == PM_CMD_GET_FW_VERSION)) {
    PM_CMD_AS_INPUT;
    clock_delay_usec(PM_2_2_MILISECOND);
    for (i = PM_MAX_BITS; i > 0; i--) {
      clock_delay_usec(PM_1_MILISECOND);
      PM_CMD_LINE_READ ? (getData |= PM_NUMBITS(i)) : (getData &= ~PM_NUMBITS(i));
    }

    PRINTF("PM: getData = 0x%02X\n", getData);
    clock_delay_usec(PM_2_2_MILISECOND);
    PM_CMD_AS_OUTPUT;
    PM_CMD_LINE_CLR;

    clock_delay_usec(PM_2_2_MILISECOND);

    return PM_SUCCESS;
  }

  /* Default case */
  clock_delay_usec(PM_1_MILISECOND);

  return pm_get_ack();
}
예제 #19
0
파일: nrf51822.c 프로젝트: lab11/atum
void nrf51822_get_all_advertisements () {
  //spi_set_mode(SSI_CR0_FRF_MOTOROLA, SSI_CR0_SPO, SSI_CR0_SPH, 8);
  spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);

  // GET ADVERTISEMENTS
  SPI_WRITE(0x02);

  SPI_FLUSH();

  SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
}
예제 #20
0
void main (void)
{
  clock_init();
  uart_init();

  P1SEL &= ~(0x10 | 0x02 | 0x01);
  P1DIR |= (0x10 | 0x02 | 0x01);

  P2SEL &= ~0x01;
  P2DIR |= 0x01;

  while(1) {
    P1_0 = 1;
    P1_1 = 1;
    P1_4 = 1;
    printf("Hello\n");
    clock_delay_usec(60000);
    P1_0 = 0;
    P1_1 = 0;
    P1_4 = 0;
    printf("World\n");
    clock_delay_usec(60000);
  }
}
void onewire_write(uint8_t data)
{
  uint8_t i;

  OUT_DQ();
  SET_DQ();
  clock_delay_usec(16);

  for(i = 0; i < 8; i++)
    {
      CLR_DQ();
      if(data & 0x01)
        {
          SET_DQ();
        }
      else
        {
          CLR_DQ();
        }
      data = data >> 1;
      clock_delay_usec(40);  //65
      SET_DQ();
    }
}
예제 #22
0
/*---------------------------------------------------------------------------*/
static int
value(int type)
{
  uint8_t channel = SOC_ADC_ADCCON_CH_AIN0 + ADC_ALS_OUT_PIN;
  int16_t res;

  GPIO_SET_PIN(ADC_ALS_PWR_PORT_BASE, ADC_ALS_PWR_PIN_MASK);
  clock_delay_usec(2000);

  res = adc_get(channel, SOC_ADC_ADCCON_REF_INT, SOC_ADC_ADCCON_DIV_512);

  GPIO_CLR_PIN(ADC_ALS_PWR_PORT_BASE, ADC_ALS_PWR_PIN_MASK);

  return res;
}
예제 #23
0
uint8_t I2C_Read_Byte(void)
{
    uint8_t i=8;
    uint8_t c=0;
    SCL=0;
    SDA=1;
    while(i--){
        c<<=1;
        SCL=0;
        clock_delay_usec(1);
        SCL=1;
        if(SDA==1)c|=0x01;
        else c&=0xfe;
    }
    SCL=0;
    return c;
}
예제 #24
0
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(energy_scan, ev, data)
{

  PROCESS_BEGIN();

  printf("Energy Scanner\n");
  printf("CCA Threshold: %d\n", (int8_t)RSSIH);
  printf("Channel scan range: [%u , %u]\n", CHANNEL_MIN, CHANNEL_MAX);
  printf("%u samples per channel, interval %u ticks\n",
      RSSI_SAMPLES, SAMPLE_INTERVAL);

  channel = CHANNEL_MIN;
  while(1) {
    cmax = RSSI_BASE;
    cc2430_rf_channel_set(channel);
    clock_delay_usec(200);

    for(j = 0; j < RSSI_SAMPLES; j++) {
      t0 = RTIMER_NOW();
      rssi = RSSIL;
      if(rssi > cmax) {
        cmax = rssi;
      }
      while(RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + 25));
    }
    printf("%u [%3d]: ", channel, cmax);
    for(j = RSSI_BASE; j <= cmax; j++) {
      printf("#");
    }
    printf("\n");
    if(channel == CHANNEL_MAX) {
      printf("===============\n");
      channel = CHANNEL_MIN;
    } else {
      channel++;
    }

    etimer_set(&et, SAMPLE_INTERVAL);
    PROCESS_YIELD();

  }

  PROCESS_END();
}
예제 #25
0
static int poti_value(int type) 
{
	uint16_t result = 0;
	uint8_t counter = 0;

    global_irq_disable();

	while(counter < 254)
	{
      adc_service();
	  result = adc_voltage(ADC_PIN);
	  counter++;
	  clock_delay_usec( 33 );
	}

    global_irq_enable();

	return result;
}
예제 #26
0
void
simistor_strob_callback(void)
{
//  rt_now = RTIMER_NOW();
//  ct = clock_time();
//  printf("Task called at %lu (clock = %lu)\n", rt_now, ct);


  GPIO_SET_PIN(GPIO_C_BASE, LAMP_CHAN0);
  clock_delay_usec(50);
//disable simistor
  GPIO_CLR_PIN(GPIO_C_BASE, LAMP_CHAN0);


//GPIO_SET_PIN(GPIO_C_BASE, 0x80);
//GPIO_CLR_PIN(GPIO_C_BASE, 0x80);

// GPIO_ENABLE_INTERRUPT(BUTTON_LEFT_PORT, BUTTON_LEFT_PIN);
// nvic_interrupt_enable(BUTTON_LEFT_VECTOR);
}
예제 #27
0
파일: i2c.c 프로젝트: 13416795/contiki
/*---------------------------------------------------------------------------*/
void
i2c_init(uint8_t port_sda, uint8_t pin_sda, uint8_t port_scl, uint8_t pin_scl,
         uint32_t bus_speed)
{
  /* Enable I2C clock in different modes */
  REG(SYS_CTRL_RCGCI2C) |= 1; /* Run mode */

  /* Reset I2C peripheral */
  REG(SYS_CTRL_SRI2C) |= 1; /* Reset position */

  /* Delay for a little bit */
  clock_delay_usec(50);

  REG(SYS_CTRL_SRI2C) &= ~1;  /* Normal position */

  /* Set pins in input */
  GPIO_SET_INPUT(GPIO_PORT_TO_BASE(port_sda), GPIO_PIN_MASK(pin_sda));
  GPIO_SET_INPUT(GPIO_PORT_TO_BASE(port_scl), GPIO_PIN_MASK(pin_scl));

  /* Set peripheral control for the pins */
  GPIO_PERIPHERAL_CONTROL(GPIO_PORT_TO_BASE(port_sda), GPIO_PIN_MASK(pin_sda));
  GPIO_PERIPHERAL_CONTROL(GPIO_PORT_TO_BASE(port_scl), GPIO_PIN_MASK(pin_scl));

  /* Set the pad to no drive type */
  ioc_set_over(port_sda, pin_sda, IOC_OVERRIDE_DIS);
  ioc_set_over(port_scl, pin_scl, IOC_OVERRIDE_DIS);

  /* Set pins as peripheral inputs */
  REG(IOC_I2CMSSDA) = ioc_input_sel(port_sda, pin_sda);
  REG(IOC_I2CMSSCL) = ioc_input_sel(port_scl, pin_scl);

  /* Set pins as peripheral outputs */
  ioc_set_sel(port_sda, pin_sda, IOC_PXX_SEL_I2C_CMSSDA);
  ioc_set_sel(port_scl, pin_scl, IOC_PXX_SEL_I2C_CMSSCL);

  /* Enable the I2C master module */
  i2c_master_enable();

  /* t the master clock frequency */
  i2c_set_frequency(bus_speed);
}
예제 #28
0
void main(void)
{
  disable_interrupt();
  
  clock_init();

  /* workaround to wait for LSM9DS0 ready */
  clock_delay_usec(60000);

  /* serial port */
  serial_init();

  /* one wire UART based LIN (ULIN) */
  ulin_init();

  /* real time timer */
  rtimer_init();

  /* radio configuration */
  rf_init(RADIO_CHANNEL);

  /* comment this line out to prevent bluetooth board from crashing */
  printf("\nSMAC2.0 - [%x:%x]\n", rf_get_short_addr1(), rf_get_short_addr0());
  
  enable_interrupt();

  /* module specific initialization - modules.h */
  module_init();

  /* flash bank used as storage */
  flash_bank_select(FLASH_BANK_7);

  /* looping services */
  while(1)
  {
    json_service();
    serial_service();
    ulin_service();
  }
}
예제 #29
0
파일: clock.c 프로젝트: 13416795/contiki
/**
 * \brief Obsolete delay function but we implement it here since some code
 * still uses it
 */
void
clock_delay(unsigned int i)
{
  clock_delay_usec(i);
}
예제 #30
0
PROCESS_THREAD(poti, ev, data)
{

  static struct etimer loop_timer;
  PROCESS_BEGIN();

  /* Initialize the REST engine. */
  rest_init_engine ();
  SERVER_NODE (&server_ipaddr);
  adc_init ();

  /* Activate the application-specific resources. */
#if PLATFORM_HAS_BATTERY
  SENSORS_ACTIVATE(battery_sensor);
  rest_activate_resource (&res_battery,         "s/battery");
#endif
  rest_activate_resource (&res_server_ip,       "poti/ip");
  rest_activate_resource (&res_server_resource, "poti/resource");
  rest_activate_resource (&res_interval,        "poti/interval");

  etimer_set (&loop_timer, LOOP_INTERVAL);
  /* Define application-specific events here. */
  while(1) {
    static int count = 0;
    static int lastval = -1;
    static coap_packet_t request [1]; /* Array: treat as pointer */
    uint8_t val = 127;

    PROCESS_WAIT_EVENT();
    if (etimer_expired (&loop_timer)) {
        uint16_t sum = 0;
        int i;
        count++;
        adc_setup (ADC_DEFAULT, A5);
        for (i=0; i<5; i++) {
            sum += adc_read ();
            clock_delay_usec (50);
        }
        adc_fin ();
        val = (sum / 5) >> 2;
        if ((interval > 0 && count > interval) || (val != lastval)) {
            char buf [4];
            coap_transaction_t *transaction;

            sprintf (buf, "%d", val);
            lastval = val;
            printf ("Sending Value: %s\n", buf);
            coap_init_message (request, COAP_TYPE_NON, COAP_PUT, 0);
            coap_set_header_uri_path (request, server_resource);
            coap_set_header_content_format (request, REST.type.TEXT_PLAIN);
            coap_set_payload (request, buf, strlen (buf));
            request->mid = coap_get_mid ();
            transaction = coap_new_transaction
                (request->mid, &server_ipaddr, REMOTE_PORT);
            transaction->packet_len = coap_serialize_message
                (request, transaction->packet);
            coap_send_transaction (transaction);
            count = 0;
        }
        etimer_reset (&loop_timer);
    }
  } /* while (1) */