pulseIn()
pulseIn(pino, valor) / pulseIn(pino, valor, timeout)
O pulseIn() funciona como um cronômetro de pulsos: você diz o nível que quer medir (HIGH ou LOW) e ele conta quanto tempo, em microssegundos, o pino ficou naquele estado. É o coração de sensores como o ultrassônico HC-SR04, onde a distância vem do tempo do eco.
Sintaxe
unsigned long t = pulseIn(pino, valor);
unsigned long t = pulseIn(pino, valor, timeout);
Parâmetros
- pino: o pino onde o pulso será medido (configure como
INPUT). - valor: o tipo de pulso a medir —
HIGHouLOW. - timeout (opcional): tempo máximo de espera em microssegundos (
unsigned long). Padrão: 1000000 (1 segundo).
Retorno
A duração do pulso em microssegundos (unsigned long). Retorna 0 se nenhum pulso chegar dentro do timeout.
Exemplo
const int TRIG = 9;
const int ECHO = 10;
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long duracao = pulseIn(ECHO, HIGH);
float distanciaCm = duracao * 0.0343 / 2.0;
Serial.println(distanciaCm);
delay(200);
}
Notas e cuidados
- É uma função bloqueante: o programa fica parado esperando o pulso (ou até estourar o timeout).
- Se o pulso não vier, retorna 0 — trate esse caso para não calcular valores errados.
- A precisão é boa para pulsos entre ~10 µs e alguns segundos; pulsos muito curtos podem ter erro de medição.