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);
}