아두이노는 여러가지의 함수를 가지고 있는데요, 오늘은 시간 함수에 대해서 알아보도록 하겠습니다.
이번 포스트에서 소개할 시간 함수는 프로그램이 구동되고 '얼마만큼의 시간이 지났는 가'를 측정하는 -경과 시간 체크 함수-와, 프로그램을 지정한 시간만큼 멈추어 주는 -동작 시간 지연 함수-에 대해서 알아보겠습니다.
경과시간 체크 함수
경과시간 체크 함수에는 두 가지가 있습니다.
millis
micros
millis 함수
unsigned long millis(void)
프로그램이 시작한 후의 경과 시간을 밀리초(milli-seconds, 1/1000초) 단위로 반환하는 간단한 함수입니다.
약 50의 시간이 경과하면 overflow로 인해 다시 0이됩니다.
경과시간은 4바이트 크기의 unsigned long 형식을 가지므로, 2바이트 크기의 int와 함께 사용하는 경우 데이터 손실이 발생할 수 있음을 주의하세요. 또한 경과 시간은 항상 양수값이기에 unsigned 자료형으로 선언후에 저장하시면 됩니다.
사용은 다음과 같이 하시면 됩니다.
time = millis();
micros 함수
unsigned long micros(void)
millis와 마찬가지의 원리를 지닌 함수입니다. 프로그램이 실행되고 경과된 시간을 마이크로초(micro-seconds, 1/1000 밀리초) 단위로 반환하는 함수입니다. 약 70분의 시간이 경과하면 overflow가 발생하여 0이됩니다.
반환되는 값은 항상 4의 배수로 주어집니다. micros 함수 자체가 4마이크로초의 해상도를 가지기 때문입니다.
유의하실 점은 millis 함수와 같습니다.
time = micros();
동작 시간 지연 함수
delay
delayMicroseconds
delay함수
void delay(unsigned long time)
time에는 밀리초(milli-seconds, 1/1000초) 단위의 값을 넣어주시면 됩니다.
간단하게, 지정한 시간(time값)만큼 프로그램을 일시 중지 시키는 함수 입니다.
delay(1000);
위와 같이 쓰시게 되면 1초(=1000/1000 밀리초)를 일시 중지 합니다.
매우 간단한 함수이기 때문에, 많이 쓰이기는 하지만 주의하실 점이 있습니다.
10밀리초 이상의 대기시간이 필요한 경우 delay 함수를 쓰지 않는 것이 바람직합니다.
-delay함수가 가진 가장 큰 특징 '프로그램을 일시 중지 시킨다.' 라는 점이 문제로 작용할 때 입니다.
delay 함수가 실행중인 동안에는 센서, 다른 부품들의 기능, 작업들이 정지하게 됩니다.
pc와는 다르게, 아두이노는 '싱글 스레드'이기 때문에(쉽게 일꾼 한 마리 라고 생각하시면 됩니다.) 한번에 한 가지 일 밖에 못합니다. 즉, 프로그램이 멈춰있으라는 명령이 실행되는 동안 전송중인 데이터가 누락되거나,. 데이터 임시 저장소인 버퍼가 넘치게 되는 문제점이 발생할 수 있지요. 따라서 설계중인 프로그램이 복잡할 수록 사용하지 않는 것이 바람직합니다. 외에 millis 함수를 통해 경과 시간을 측정하는 방법을 권장합니다.
delay함수가 실행중인 동안에도 몇 가지 작업은 계속되는 데요,
ex) RX핀으로 수신되는 시리얼 통신 데이터는 수신 버퍼에 기록되기도 하고, analogWrite에 쓰인 PWM값은 그대로 유지되며, 인터럽트 역시 동작합니다.
delayMicroseconds 함수
void delayMicroseconds (unsigned long time)
time: 마이크로초 단위의 시간.
delay함수와 같습니다. 차이점은, 마이크로초(micro-seconds, 1/1000 밀리초) 단위로 프로그램을 일시 중지 시키는 함수입니다.
현재 최대 지연 시간은 16383 마이크로초입니다. (www.arduino.cc 발췌)
이보다 긴 지연시간을 필요로 할 때는 delay함수를 사용하시면 됩니다. delayMicroseconds 함수는 3마이크로초 이상에서 정화가게 동작하며, 그 미만에서는 정확성을 보장하지 못합니다.
특징, 문제점 모두 delay함수와 같습니다.
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-xiii. 함수 -난수 생성 함수 (0) | 2020.12.31 |
---|---|
아두이노 소프트웨어-xii. 함수 -수학 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-x. 함수 -디지털, 아날로그 입출력, 기타 입출력 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-ix. 객체지향 (0) | 2020.12.31 |
아두이노 소프트웨어-viii. C언어 함수, 포인터 (0) | 2020.12.31 |