일상 박형

카테고리       

[복사하고 따라하는 아두이노] 아두이노 타이머 사용하기

 

안녕하세요 공대 박형입니다.

 

오늘은 아두이노 타이머 예제를 실습해보겠습니다.

 

코드부터 보시죠.

 

int led = 13;

void setup()

{

  pinMode(led, OUTPUT);

}

void loop()

{

digitalWrite(led, HIGH);

delay(1000);

digitalWrite(led, LOW);

delay(1000);

}



이 코드에서 delay함수를 이용해 1초 동안 코드 처리를 중단시킵니다. 하지만 digitalWrite(led, HIGH);함수를처리하는시간은고려되지않았습니다.

즉 이와 같은 방법으로는 정확히 1초 간격으로 깜박이지 않고 오차가 발생합니다. 다른 방법으로 코드를 작성해보겠습니다.

 

int led = 13;

void setup()

{

  pinMode(led, OUTPUT);

}

void loop()

{

           static unsigned long real_time = millis();

           digitalWrite(led, HIGH);

          for (;(real_time + 1000) > millis(););

           digitalWrite(led, LOW);

          for (;(real_time + 2000) > millis(););

          real_time+=2000;

}

 


프로그램이 시작되고 loop문으로 들어가면 static unsigned long real_time = millis();를 실행시켜 시간을 초기화합니다. static이 선언되면 루프문이 한바퀴 돌고 두번 째 돌아갈 때 static변수는 다시 초기화되지 않습니다.

두번째 줄에서 디지털 신호를 보내고 for (;(real_time + 1000) > millis(););을 실행합니다. 이는 loop문이 시작되고 1초가 지날 때까지 for문을 이용해 시간이  다음 줄로 넘어가지 않게 합니다.

이와같이 타이머를 사용하면 실제로 프로그램이 시작되고 얼마의 시간이 흘렀는지 정확하게 계산할 수 있습니다.

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band