millis()
설명
아두이노 보드가 현재 프로그램을 돌리기 시작한 후 지난 밀리 초 숫자를 반환한다. 이 숫자는 약 50 일 후에 오버플로우(0으로 돌아감)가 된다.
문법
time_ms = millis()
매개변수
- 없음
반환값
- 프로그램 시작 후 지난 시간 (unsigned long)
예제 코드
예제 코드 1
이 코드는 아두이노 보드가 시작한 후 지난 밀리 초 시간을 읽는다.
unsigned long time_ms;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Time: ");
time_ms = millis();
Serial.println(time_ms); // 프로그램 시작후 지난 시간 출력
delay(1000); // 너무 많은 데이터를 보내지 않기 위해 1초 기다림
}
시리얼 모니터에 결과:
COM6
Time: 0
Time: 999
Time: 1999
Time: 3000
Time: 4000
Time: 5000
Time: 6000
Time: 7001
Time: 8001
Time: 9001
Autoscroll
Clear output
9600 baud
Newline
예제 코드 2
Print a text one time per second without blocking other codes
const unsigned long TIME_INTERVAL = 1000;
unsigned long previousMillis;
void setup() {
Serial.begin(9600);
previousMillis = millis();
}
void loop() {
if (millis() - previousMillis >= TIME_INTERVAL) {
previousMillis = millis();
Serial.println("Arduino References");
}
}
※ 주의 및 경고:
- millis()의 반환 값은 unsigned long 이므로 프로그래머가 int 와 같은 작은 자료형으로 산술을 수행하려고하면 논리 오류가 발생할 수 있다. signed long 의 최대값의 경우도 unsigned long의 최대값의 절반이기 때문에 오류가 발생할 수 있다.
- The return value of millis() function rolls over back to zero after roughly 50 days. If the sketch is intended to run for longer than that, It needs to make sure the rollover does not make the sketch fail. To solve it, write rollover-safe code. Let's compare the two following inequations:
- millis() >= (previousMillis + TIME_INTERVAL)
- (millis() - previousMillis) >= TIME_INTERVAL
- Mathematically, they are equivalent to each other. However, in programming, they are not. That is because the size of storage is unlimited in mathematics while it is limited to 4 bytes in Arduino programming. In programming, when the rollover happens, the first inequation makes the sketch fail while the second inequation does NOT. Therefore:
- Do NOT use if (millis() >= (previousMillis + TIME_INTERVAL)),
- Use if(millis() - previousMillis >= TIME_INTERVAL) instead
더보기
- 언어 : delay()
- 언어 : delayMicroseconds()
- 언어 : micros()
- 언어 : delay()
- 언어 : delayMicroseconds()
- 언어 : micros()
- 튜토리얼 : Blink Without Delay
※ ARDUINO BUY RECOMMENDATION
Arduino UNO R3 | |
Arduino Starter Kit |
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.