This page is also available in 3 other languages

pulseInLong()

[I/O Avanzato]

Description

Legge un impulso (sia di tipo HIGH oppure LOW) su un pin. Per esempio, se valore = HIGH, pulseInLong() aspetta che il pin vada nello stato HIGH, incomincia a contare, quindi aspetta che il pin vada nello stato LOW e smette di contare. Restituisce la durata dell’impulso in microsecondi. Si interrompe e restituisce 0 se nessun impulso parte entro il timeout specificato.

La temporizzazione di questa funzione è stata determinata empiricamente e probabilmente produrrà errori con gli impulsi più lunghi. Funziona sugli impulsi di lunghezza compresa tra 10 microsecondi e 3 minuti. Nota anche che se il pin è gia nello stato HIGH quando la funzione viene chiamata, essa aspetterà che il pin vada nello stato LOW e poi HIGH prima di iniziare a contare. Questa routine può essere usata solo se gli interrupt sono attivati. Inoltre, la risoluzione più alta è ottenuta con intervalli lunghi.

Sintassi

pulseInLong(pin, valore)

pulseInLong(pin, valore, timeout)

Parametri

pin: il numero del pin dal quale vuoi leggere l’impulso. (int)

valore: il tipo di impulso da leggere: può essere HIGH oppure LOW. (int)

timeout (opzionale): il numero dei microsecondi in cui aspettare che l’impulso parta; Il valore predefinito è di un secondo ( unsigned long )

Restituisce

la durata dell’impulso ( in microsecondi ) oppure 0 se nessun impulso è partito prima del timeout ( unsigned long )

Codice di esempio

Questo programma di esempio calcola il tempo di durata di un impulso sul pin 7.

int pin = 7;
unsigned long duration;

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

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

Note e Avvertimenti

Questa funzione si basa su micros() quindi non può essere usata nel contesto di noInterrupts().