BlinkA

A simple Insense program which blinks the red green and blue LEDs at specified timer intervals.

/**
* This program flashes the red, free, and blue LEDs every 250ms, 500ms,
* and 1000ms respectively.
*
*/

//interface with three channels, one for each incoming timer tick
type blinkI is interface (in bool redChan ; in bool blueChan ; in bool greenChan)

component blink presents blinkI {

	redState = true
	blueState = true
	greenState = true

	constructor(){
		setTimer(redChan , 0.25 , true)
		setTimer(blueChan , 0.5 , true)
		setTimer(greenChan , 1.0 , true)	
	}

	behaviour {
	
		select {
			receive tick from redChan : {
				setRedLedPower(redState)
				redState := !redState
			}
			receive tick from blueChan : {
				setBlueLedPower(blueState)
				blueState := !blueState
			}
			receive tick from greenChan : {
				setGreenLedPower(greenState)
				greenState := !greenState
			}			
		}
	
	}
}

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

blinker = new blink()

The corresponding nesC program for TinyOS is shown below.


configuration BlinkAppC
{
}
implementation
{
  components MainC, BlinkC, LedsC;
  components new TimerMilliC() as Timer0;
  components new TimerMilliC() as Timer1;
  components new TimerMilliC() as Timer2;


  BlinkC -> MainC.Boot;

  BlinkC.Timer0 -> Timer0;
  BlinkC.Timer1 -> Timer1;
  BlinkC.Timer2 -> Timer2;
  BlinkC.Leds -> LedsC;
}

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

#include "Timer.h"

module BlinkC @safe()
{
  uses interface Timer as Timer0;
  uses interface Timer as Timer1;
  uses interface Timer as Timer2;
  uses interface Leds;
  uses interface Boot;
}
implementation
{
  event void Boot.booted()
  {
    call Timer0.startPeriodic( 250 );
    call Timer1.startPeriodic( 500 );
    call Timer2.startPeriodic( 1000 );
  }

  event void Timer0.fired()
  {
    dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string());
    call Leds.led0Toggle();
  }
  
  event void Timer1.fired()
  {
    dbg("BlinkC", "Timer 1 fired @ %s \n", sim_time_string());
    call Leds.led1Toggle();
  }
  
  event void Timer2.fired()
  {
    dbg("BlinkC", "Timer 2 fired @ %s.\n", sim_time_string());
    call Leds.led2Toggle();
  }
}