'5진 카운터'에 해당되는 글 2건

  1. 2010.12.02 [Tiny os] 타이머 3개를 이용한 5진 카운터.
  2. 2010.12.02 [Tiny os] 5진 카운트 [타이머 한개]
posted by nsakura 2010. 12. 2. 10:52

컴포넌트와 와이어링은 타이머3개를 이용한 8진 카운터와 같습니다.

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

  int ncnt=0;

  void timerallstop(){
 call Timer0.stop();
 call Timer1.stop();
 call Timer2.stop();
  }

  void timerallstart(){
 call Timer0.startPeriodic(1000);
 call Timer1.startPeriodic(2000);
 call Timer2.startPeriodic(4000);
  }

  void ledinit(){
  call Leds.led0Off();
  call Leds.led1Off();
  call Leds.led2Off();
  }

  event void Boot.booted() {
  timerallstart();
  }

  event void Timer0.fired()  {
    call Leds.led2Toggle();
 
 ncnt++;

 if(ncnt==5){
  ncnt=0;
  timerallstop();
  ledinit();
  timerallstart();
 }

 
  }
 
  event void Timer1.fired()  {
    call Leds.led1Toggle();
  }

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

}


 R  sec  G  sec  Y  sec  ncnt
 0  1  0  1  0  0  0
 0  2  0  2  1  1  1
 0  3  1  1  0  0  2
 0  4  1  2  1  1  3
 1  1  0  1  0  0  4
           5->0

ncnt가 5가 되면 타이머를 멈추고 led를 초기화 그다음에 다시 타이머를 실행한다.



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

8진 카운트에서 하나만 바꿔주면.. 5진카운터가 되죠. [타이머 하나]

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==5){
  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
       5->0