micros()로 측정하기
Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 16번째.
millis()는 밀리초 단위의 정수만 세므로 짧은 시간 측정에는 너무 거칩니다. 2.5 ms 동안 눌러도 2 또는 3으로 읽힙니다. micros()도 같은 종류의 시계이지만, 초의 백만분의 1인 마이크로초를 셉니다. 밀리초마다 1000마이크로초가 있습니다.
Uno에서는 4마이크로초 단위로 증가하며, 이 함수도 unsigned long을 반환합니다. 시간을 측정하려면 시작 전과 끝난 후에 값을 읽고 뺍니다.
unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took); // 약 110: analogRead()는 약 0.1 ms가 걸립니다매우 빠르게 세기 때문에 micros()는 millis()보다 훨씬 빨리 숫자가 바닥납니다. 약 70분 후에는 0부터 다시 시작합니다. 짧은 시간을 측정할 때는 이것을 사용하고, 몇 분보다 긴 시간에는 millis()를 사용하세요.
챌린지
쉬움버튼을 누르고 있는 시간을 마이크로초 단위로 측정하세요:
- 버튼을 누르면
micros()를pressedAt에 저장합니다 - 버튼에서 손을 떼면
micros() - pressedAt를 출력합니다
실행을 누르고 버튼을 탭한 다음 확인을 누르세요.
직접 해보기
const int buttonPin = 2;
bool wasPressed = false;
unsigned long pressedAt = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// 버튼이 방금 눌렸습니다: 시간을 기록하세요
}
if (!pressed && wasPressed) {
// 버튼에서 방금 손을 뗐습니다: 눌려 있던 시간을 마이크로초 단위로 출력하세요
}
wasPressed = pressed;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
delay 없이 타이밍 제어하기의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드