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 — HIGH ou LOW.
  • 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.

Quer aprender a usar isso em projetos reais, do zero?

Conhecer o Curso Maker