Главная chevron_right Функции chevron_right Расширенный ввод/вывод chevron_right pulseIn()

pulseIn()

pulseIn() измеряет длительность импульса HIGH или LOW на цифровом выводе и возвращает результат в микросекундах; если импульс не пришёл вовремя, возвращает 0.

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

Описание

Функция pulseIn() позволяет узнать, как долго на выводе удерживается сигнал высокого или низкого уровня — то есть измерить длительность одного импульса. Если задать параметр value равным HIGH, функция pulseIn() сначала дождётся, когда вывод перейдёт из LOW в HIGH, запустит внутренний счётчик времени, а затем будет ждать обратного перехода в LOW. Как только это произойдёт, счётчик остановится, и функция вернёт измеренную длительность в микросекундах. Если за отведённое время импульс так и не завершился, возвращается 0.

Важно понимать, что измерение основано на программном отсчёте времени, поэтому на очень длинных импульсах возможна небольшая погрешность. Уверенно работать можно с импульсами от 10 микросекунд до 3 минут.

Если вы заранее знаете, что импульс должен прийти быстро, передайте необязательный параметр тайм-аута — это позволит функции не ждать лишнего и ускорит выполнение программы.

Синтаксис

  • pulseIn(pin, value)
  • pulseIn(pin, value, timeout)

Параметры

  • pin: номер вывода Arduino, на котором нужно измерить импульс. Допустимый тип данных: int.
  • value: уровень измеряемого импульса — HIGH или LOW. Допустимый тип данных: int.
  • timeout (необязательно): максимальное время ожидания начала импульса в микросекундах. Если параметр не указан, функция будет ждать одну секунду. Допустимый тип данных: unsigned long.

Возвращаемое значение

Длительность импульса в микросекундах. Если импульс не начался до истечения тайм-аута, функция возвращает 0. Тип данных результата: unsigned long.

Пример кода

В примере ниже измеряется длительность импульса на выводе 7, после чего результат в микросекундах выводится в монитор порта.

int pin = D1;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

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