[복사하고 따라하는 아두이노] 아두이노 타이머 사용하기
안녕하세요 공대 박형입니다.
오늘은 아두이노 타이머 예제를 실습해보겠습니다.
코드부터 보시죠.
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문을 이용해 시간이 다음 줄로 넘어가지 않게 합니다.
이와같이 타이머를 사용하면 실제로 프로그램이 시작되고 얼마의 시간이 흘렀는지 정확하게 계산할 수 있습니다.