본문 바로가기

Arduino/[3] Arduino Cording

[Arduino Cording] #1. millis 함수

728x90
반응형

millis

일반적으로 아두이노에 지연을 주기 위해 delay 함수를 사용한다. 하지만 delay 함수는 치명적인 단점이있는데, 바로 delay 함수를 수행하는 동안 CPU는 아무일도 수행하지 않는다는 점이다.

 

delay 함수는 하나의 일을 주기적으로 수행하는 경우에는 사용하기 편리하지만 여러 가지 일을 동시에 주기적으로 수행하는 프로그램에는 적합하지 않다. 이런 경우 mills 함수를 이용해 문제를 해결한다.

millis 함수로 현재 시간 확인하기

millis 함수를 이용하여 현재 시간을 밀리 초 단위로 읽어보자.

void setup(){
    Serial.begin(115200);
}

void loop(){
    unsigned long cnt = millis();
    Serial.println(cnt);
}
  • 시리얼 모니터의 통신 속도를 115200으로 설정한다.
  • millis 함수를 호출하여 아두이노가 시작된 이후 현재 시간을 밀리 초 단위로 읽어낸다. cnt 변수는 unsigned long 형의 데이터로 4바이트 크기를 갖는다. 큰 정수의 값을 저장할 때 사용한다.

millis 함수로 delay 함수 대체하기

long pre = 0;
long interval = 1000;//딜레이 시간

void setup(){
    Serial.begin(115200);
}

void loop(){
    unsigned long cnt = millis();
    if(cnt - pre > = interval){
    	pre = cnt;
        //Serial.println(cnt);
        /*
        interval 만큼의 간격으로 해당 코드 실행
        */
    }
}

용어 설명

long pre = 0;
long interval = 1000;//딜레이 시간
pre 이전의 시간 저장 변수. pre 값을 딜레이 간격마다 업데이트한다.
interval 시간 간격: 딜레이 간격
void loop(){
    unsigned long cnt = millis();
    if(cnt - pre > = interval){
    	pre = cnt;
        //Serial.println(cnt);
        /*
        interval 만큼의 간격으로 해당 코드 실행
        */
    }
}
  • loop함수를 이용하여 아두이노가 실행된 시점부터의 시간을 cnt에 저장
  • 만약 (cnt - pre)값이 시간 간격 interval 보다 큰 경우 - interval만큼의 시간이 지난 경우 pre값을 현재 시간으로 업데이트

다중 mills 함수를 사용할 때 아두이노가 실행된 이후 시간 저장 변수를 각각 다르게 설정해야함에 주의한다.

728x90
반응형
댓글