pulseInLong() / Arduino

Добавлено 31 октября 2018 в 21:29

Описание

pulseInLong() – это альтернатива функции pulseIn(), которая лучше обрабатывает длинные импульсы и сценарии, на которые влияют прерывания.

Считывает импульс (HIGH или LOW) на выводе. Нарпимер, если value равно HIGH, pulseIn() ожидает, что состояние на выводе перейдет с LOW на HIGH, начинает отсчет времени, и затем ждет, что состояние на выводе перейдет на LOW и останавливает отсчет времени. Возвращает длину импульса в микросекундах или сдается и возвращает 0, если в течение таймаута не было получено полного импульса.

Время этой функции были определены эмпирически и, вероятно, будут показывать ошибки в более коротких импульсах. Работает с импульсами длиной от 10 микросекунд до 3 минут. Данная функция может использоваться только при активации прерываний. Кроме того, наибольшее разрешение получается с большими интервалами.

Синтаксис

pulseInLong(pin, value)
pulseInLong(pin, value, timeout)

Параметры

pin: номер вывода, на котором вы хотите прочитать импульс (int).

value: тип импульса для чтения: HIGH или LOW (int).

timeout (необязательно): количество микросекунд для ожидания начала импульса; по умолчанию равен одной секунде (unsigned long).

Возвращает

Длину импульса (в микросекундах) или 0, если импульс не начался до таймаута (unsigned long).

Пример кода

Данный пример рассчитывает время продолжительности импульса на выводе 7.

int pin = 7;
unsigned long duration;

void setup()
{
  pinMode(pin, INPUT);
}

void loop()
{
  duration = pulseInLong(pin, HIGH);
}

Примечания и предупреждения

Данная функция зависит от micros(), и поэтому ее нельзя использовать в контексте noInterrupts().

 


На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.


Сообщить об ошибке