테크/예제

[아두이노] 멀티태스킹 & 다중작업 millis()

시그널보내 2021. 6. 29. 23:31

일반적으로 처음 아두이노를 접할때 led를 켰다 끄는 법을 배우면서 자연스럽게 delay라는 명령어를 사용하게 된다.

 

이 delay는 프로그램을 지연시킨다는 뜻이며 결국 지연되는 시간동안 아무런 작업을 수행하지 못하고 멈춘 상태가 된다.

 

예를들어 delay(1000)이라는 명령을 내리면 1초동안 회로가 멈춤상태가 되며

 

실제로 우리가 컴퓨터나 스마트폰을 이용할 때 1초가 지연되면 엄청나게 답답함을 느낄 것이다.

 

이런 문제점을 해결하고자 도입된 개념이 millis()함수 이다.

 

millis란 millisecond의 약자로 1/1000초로 아주아주아주 매우매우매우 짧은 시간이다.

 

아주 짧은 시간 안에 빠르게 작업을 수행하여 마치 우리 눈에는 멀티테스킹을 하는 것 처럼 보인다.

 

이런 마이크로컨트롤러는 동시에 여러 작업을 하지 못하고 한 순간에 하나의 작업만 할 수 있이며

 

컴퓨터는 마치 동시에 여러 작업을 하는 것처럼 보이지만 사실 이는 매우 빠른 속도로 하나의 작업만 하고 있는 것이다.

 

다음은 millis함수를 이용한 기본적인 예제이다.

long time = millis() ;

void setup() {
  pinMode(7, OUTPUT);  //7번 핀에 led연결
}

void loop() {
  if (time + 1000 < millis()) {  //0~1초동안 
    digitalWrite(7, HIGH) ;  //출력해라
  }
  if (time + 2000 < millis()) {  //1~2초동안
    time = millis() ; //time초기화
    digitalWrite(7, LOW) ;  //꺼라
  }
}

millis함수는 매우 빠른시간으로 많은 변수가 생성되고 이를 표현하기 위해서 가능한 큰 자료형인

long 혹은 unsignede long형태의 자료형을 쓴다.

 

 

다음은 아두이노 홈페이지 millis()함수에관한 설명이다.

https://www.arduino.cc/reference/ko/language/functions/time/millis/

 

millis() - 아두이노 참조

설명 아두이노 보드가 현재 프로그램을 돌리기 시작한 후 지난 밀리 초 숫자를 반환한다. 이 숫자는 약 50 일 후에 오버플로우(0으로 돌아감)가 된다. 문법 매개변수 반환 프로그램 시작 후 지난

www.arduino.cc