Você está na página 1de 12

Entradas e Saídas Avançadas

pulseIn()
Captura a duração de um pulso em um pino (que pode ser HIGH ou LOW). Por exemplo,
se o valor HIGH é passado para a função, a função pulseIn() espera o pino ir para do
estado 'LOW' para HIGH, começa a temporizar, então espera o pino ir para o estado LOW
e para de temporizar.

Reinaldo Silvestre
Parâmetros
pino: o número do pino no qual se quer capturar a duração de um pulso. (int)
valor: tipo de pulso a ser lido: pode ser HIGH ou LOW. (int)
Tempo de espera (opcional): o número de microssegundos a se esperar pelo começo do pulso; o
padrão é um segundo. (unsigned long)

Retorna
A duração do pulso (em microssegundos) ou 0 se nenhum pulso começar antes de se esgotar o tempo
de espera (unsigned long).

Reinaldo Silvestre
Código de Exemplo

O exemplo abaixo imprime a duração de um pulso no pino 7.

int pino = 7; //pino para a entrada do pulso


unsigned long duracao; //variável para guardar a duração do pulso
void setup()
{
Serial.begin(9600);
pinMode(pino, INPUT);
}
void loop()
{
duracao = pulseIn(pino, HIGH);
Serial.println(duraçao);
}
3

Reinaldo Silvestre
Entradas e Saídas Avançadas
pulseInLong()

pulseInLong() é uma alternativa à função pulseIn(), sendo melhor para lidar


com pulsos longos e situações afetadas por interrupções.
Essa função pode ser utilizada apenas quando interrupções estiverem
ativadas. Além disso, resoluções maiores são alcançadas com intervalos
maiores.
Sintaxe
pulseInLong(pino, valor)
pulseInLong(pino, valor, tempo de espera)
4

Reinaldo Silvestre
Código de Exemplo
O exemplo abaixo imprime na porta serial a duração de um pulso no pino 7.

int pino = 7; // pino para a entrada do pulso


unsigned long duracao; // variável para guardar a duração do pulso
void setup() {
Serial.begin(9600);
pinMode(pino, INPUT);
}
void loop() {
duracao = pulseInLong(pino, HIGH);
Serial.println(duracao);
}

Reinaldo Silvestre
Entradas e Saídas Avançadas
pulseIn()

Experimento realizado visando simular um equipamento existente no Parque Tecnológico.


Este equipamento precisa coletar pulsos de um pouco mais de 2v e de 50µs de duração, este
equipamento é bem caro, e seria bem interessante substitui-lo por uma solução mais barata.
Para tentar gerar um sinal semelhante ao equipamento, foram utilizados 2 arduinos Mega,
com um circuito bem simples, utilizando um Arduino para gerar os pulsos e outro para detecta-los.

Reinaldo Silvestre
Detectando pulso PWM

Reinaldo Silvestre
Os pulsos foram gerados pelo seguinte código:

#define P_OUT 7

void setup()
{
pinMode(P_OUT,OUTPUT);
}

void loop()
{
digitalWrite(P_OUT,LOW);
delayMicroseconds(1000);
digitalWrite(P_OUT,HIGH);
delayMicroseconds(100);
}
8

Reinaldo Silvestre
Já na detecção foi usado o seguinte código:

#define P_IN 8
void setup()
{
pinMode(P_IN,INPUT);
Serial.begin(115200);
}
long t = 0;
int i = 0;
void loop()
{
t=pulseIn(P_IN,HIGH);
if(t==0)
return;
Serial.print(t-7);
Serial.print(' ');
i++;
if(i > 20)
{
Serial.println();
i=0; 9

}
Reinaldo Silvestre
}
Projeto de uma trena eletrônica para a implementação da função
pulseIn()

Circuito meramente ilustrativo


10

Reinaldo Silvestre
As figuras demonstram o valor do pulso em micro segundos, quanto maior a distancia maior
o seu tempo de retorno. A primeira figura foi programada para ler uma distancia de 5cm e a
segunda 22cm, ambas foram expressas no monitor serial.

11

Reinaldo Silvestre
Referências
Arduino descomplicado: Como Elaborar Projetos de Eletrônica
https://www.amazon.com.br/s/ref=dp_byline_sr_book_1?ie=UTF8&field-
author=Claudio+Luis+Vieira+Oliveira+e+Humberto+Augusto+Piovesana+Zanetti
&search-alias=books
https://www.arduino.cc/reference/pt/language/functions/advanced-io/pulsein/
https://www.arduino.cc/reference/pt/language/functions/advanced-io/pulseinlong/
http://automatobr.blogspot.com/2016/03/detectando-pulsos-com-o-arduino.html

12

Reinaldo Silvestre

Você também pode gostar