Главная chevron_right Функции chevron_right Время chevron_right micros()

micros()

micros() возвращает количество микросекунд с момента старта программы (тип unsigned long) — удобно для измерения коротких интервалов точнее, чем даёт millis().

Полная статья

Описание

Функция micros() возвращает, сколько микросекунд прошло с момента запуска текущей программы на плате Arduino. Это аналог millis(), но с более высоким разрешением — полезно там, где миллисекундной точности недостаточно.

Счётчик переполняется примерно через 70 минут: после этого значение сбрасывается в ноль и начинает считаться заново. Если программа работает дольше — учитывайте это в логике.

Разрешение функции зависит от семейства платы Arduino: на разных контроллерах минимальный шаг может отличаться.

Синтаксис

micros()

Параметры

Функция не принимает никаких параметров.

Возвращает

Количество микросекунд с момента старта программы на плате Arduino. Тип возвращаемого значения — unsigned long.

Поскольку тип unsigned long беззнаковый, вычитание двух значений micros() работает корректно даже при переполнении — разность остаётся верной, если прошедшее время не превышает ~70 минут.

Пример кода

Код ниже выводит количество микросекунд с момента, когда плата Arduino начала выполнять текущую программу:

unsigned long time;

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.print("Time: ");
  time = micros();

  Serial.println(time); //выводит время с момента запуска программы
  delay(1000);          // пауза в секунду, чтобы не отправлять слишком много данных
}

Где применяется

  • Измерение коротких интервалов — например, времени отклика датчика или длительности импульса.
  • Неблокирующие задержки — вместо delay() можно проверять разницу micros(), не останавливая выполнение остального кода.
  • Отладка производительности — оценить, сколько микросекунд занимает отдельный участок скетча.
  • Работа с протоколами — некоторые протоколы передачи данных требуют точных временных пауз в единицы или десятки микросекунд.

Практические замечания

  • В одной миллисекунде 1 000 микросекунд, в одной секунде — 1 000 000 микросекунд. Держите это в голове при пересчёте.
  • Для измерения интервала всегда сохраняйте стартовое значение в переменную типа unsigned long, а затем вычитайте его из текущего micros(). Не сравнивайте абсолютные значения напрямую.
  • Прерывания (interrupts) могут влиять на точность: если в момент вызова micros() выполняется обработчик прерывания, показание может быть немного смещено.
  • Не используйте micros() внутри обработчика прерывания на некоторых платах — поведение может быть непредсказуемым.
  • Если нужна точность в миллисекундах, а не микросекундах, используйте millis() — это проще и надёжнее для длинных интервалов.

Полезные материалы