pulseInLong()
Описание
pulseInLong() – это альтернатива pulseIn(), которая лучше справляется с длинными импульсами и сценариями, затронутыми прерываниями.
Считывает импульс (HIGH или LOW) на пине. Например, если value равен HIGH, pulseInLong() ожидает перехода пина из LOW в HIGH, начинает отсчёт времени, затем ожидает перехода пина в LOW и останавливает отсчёт. Возвращает длительность импульса в микросекундах или сдаётся и возвращает 0, если полный импульс не был получен в течение таймаута.
Тайминг этой функции определён эмпирически и, вероятно, будет содержать ошибки на более коротких импульсах. Работает с импульсами длительностью от 10 микросекунд до 3 минут. Эту функцию можно использовать только при активированных прерываниях. Кроме того, наивысшее разрешение достигается при больших интервалах.
Синтаксис
Используйте следующие функции для измерения длительности импульса на конкретном пине:
pulseInLong(pin, value)pulseInLong(pin, value, timeout)
Параметры
Функция принимает следующие параметры:
pin: номер пина Arduino, на котором нужно измерить импульс. Допустимые типы данных:int.value: тип считываемого импульса:HIGHилиLOW. Допустимые типы данных:int.timeout(необязательный): время ожидания начала импульса в микросекундах; по умолчанию одна секунда. Допустимые типы данных:unsigned long.
Возвращаемое значение
Возвращает длительность импульса (в микросекундах) или 0, если импульс не начался до истечения таймаута. Тип данных: unsigned long.
Пример кода
Пример выводит длительность импульса на пине D1.
int pin = D1;
unsigned long duration;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
duration = pulseInLong(pin, HIGH);
Serial.println(duration);
}
Примечания и предупреждения
Предупреждение
Эта функция зависит от micros(), поэтому не может использоваться в контексте noInterrupts().