posted by nsakura 2010. 12. 2. 10:08


타이머 3개를 사용한 8진 카운터 입니다.

컴포넌트 및 와이어링.

configuration BlinkTimer {
}

implementation {

  components MainC, BlinkTimerM, LedsC, new TimerMilliC() as Timer0, new TimerMilliC() as Timer1, new TimerMilliC() as Timer2;
 
  BlinkTimerM.Boot -> MainC;
  BlinkTimerM.Leds -> LedsC;
  BlinkTimerM.Timer0->Timer0;
  BlinkTimerM.Timer1->Timer1;
  BlinkTimerM.Timer2->Timer2;
}

메인 프로그래.

module BlinkTimerM {
  uses {
 interface Boot;
 interface Timer<TMilli> as Timer0;
 interface Timer<TMilli> as Timer1;
 interface Timer<TMilli> as Timer2;
 interface Leds;
  }
}
implementation {

  event void Boot.booted() {
 call Timer0.startPeriodic(1000);
 call Timer1.startPeriodic(2000);
 call Timer2.startPeriodic(4000);
  }
  
  event void Timer0.fired()  {
    call Leds.led2Toggle();  
  }
 
  event void Timer1.fired()  {
    call Leds.led1Toggle();
  }

  event void Timer2.fired()  {
    call Leds.led0Toggle();    
  }

}

 R  sec  G  sec  Y   sec
 0  1  0  1  0   0 
 0  2  0  2  1  1
 0  3  1  1  0  0
 0  4  1  2  1  1
 1  1  0  1  0  0
 1  2  0  2  1  1
 1  3  1  1  0  0
 1  4  1  2  1  1



posted by nsakura 2010. 12. 2. 09:28


if 문이 너무 더러워서.. 수정합니다.

하나의 타이머로 작동

사실 시간부족으로 대충한걸 아직 까지 올려두었는데.. 헤헷`

module BlinkTimerM {
  uses {
 interface Boot;
 interface Timer<TMilli>;
 interface Leds;
  }
}
implementation {
  ncnt=0;
  event void Boot.booted() {
 call Timer.startPeriodic(1000);
  }
  
  event void Timer.fired()  {
 call Leds.led0Off();
 call Leds.led1Off();
 call Leds.led2Off();

    if(ncnt>3){
  call Leds.led0On();
 }
 if(ncnt%4>1){
  call Leds.led1On();
 }
 if(ncnt%2>0){
  call Leds.led2On();
 }
 
 ncnt++;

 if(ncnt==8){
  ncnt=0;
 }
   
  }
 
}

 R  G  Y  ncnt  G mod  Y mod
 0  0  0  0  0  0
 0  0  1  1  1  1
 0  1  0  2  2  0
 0  1  1  3  3  1
 1  0  0  4  0  0
 1  0  1  5  1  1
 1  1  0  6  2  0
 1  1  1  7  3  1
       8->0