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()— это проще и надёжнее для длинных интервалов.