Menu
CoddyTech

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()를 사용하세요.

challenge icon

챌린지

쉬움

버튼을 누르고 있는 시간을 마이크로초 단위로 측정하세요:

  • 버튼을 누르면 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;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

delay 없이 타이밍 제어하기의 모든 레슨

직접 연습해 보세요: Arduino 플레이그라운드