pulseInLong()

[Speciális I/O]

Leírás

A pulseInLong() a pulseIn() alternatívája, amely jobban kezeli a hosszú impulzusokat és a megszakításokkal érintett forgatókönyveket.

Kiolvas egy impulzust (HIGH vagy LOW) egy tűn. Például, ha az érték HIGH, a pulseInLong() megvárja, hogy a kivezetés LOW-ról HIGH-ra váltson, elindítja az időzítést, majd megvárja, amíg a kivezetés LOW-ra megy, és leállítja az időzítést. Visszaadja az impulzus hosszát mikroszekundumban, vagy feladja, és 0-t ad vissza, ha nem érkezett teljes impulzus az időtúllépésen belül.

Ennek a függvénynek az időzítését empirikusan határozták meg, és valószínűleg rövidebb impulzusok esetén hibákat fog mutatni. 10 mikroszekundumtól 3 percig terjedő impulzusokon működik. Ez a rutin csak akkor használható, ha a megszakítások aktiválva vannak.
Ezenkívül a legnagyobb felbontást nagy időközökkel érjük el.

Szintaxis

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

Paraméterek

pin: annak az Arduino kivezetésnek a száma, amelyen le szeretné olvasni az impulzust. Engedélyezett adattípusok: int.
value: az olvasandó impulzus típusa: HIGH vagy LOW. Engedélyezett adattípusok: int.
timeout: (opcionális): az impulzus kezdetére várakozás mikromásodperceinek száma; az alapértelmezett egy másodperc. Engedélyezett adattípusok: unsigned long.

Visszatérési érték

Az impulzus hossza (mikromásodpercben) vagy 0, ha nem indult impulzus az időtúllépés előtt. Adattípus: unsigned long.

Példa

A példa a 7-es kivezetésen egy impulzus időtartamát írja ki.

int pin = 7;
unsigned long duration;

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

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

Megjegyzések és figyelmeztetések

Ez a függvény a micros() függvényre támaszkodik, így nem használható noInterrupts() környezetben.

Lásd még