Descripción
Lee un pulso (HIGHo LOW) en un pin. Por ejemplo, si el valor es alto, pulseIn () espera a que el pin pase a nivel HIGH, se inicia el tiempo, espera a que el pin pase a nivel LOW y para el cronómetro. Devuelve la longitud del impulso en microsegundos o 0 si no se recibe un pulso completo dentro del tiempo de espera.
La temporización de esta función se ha determinado empíricamente y probablemente mostrará errores en los pulsos más cortos. Funciona en pulsos de 10 microsegundos a 3 minutos de duración. Tenga en cuenta también que si el pin ya está a nivel HIGH cuando la función es llamada, se espera que el pin pase a nivel LOW y luego a nivel HIGH antes de que empiece a contar. Esta rutina se puede utilizar sólo si se activan las interrupciones. Por otra parte la resolución más alta se obtiene con intervalos cortos.
Sintaxis
pulseIn (pin, value)
pulseIn (pin, value, timeout)
Parámetros
pin: el número de pin en el que desea leer el pulso. (int)
timeout (opcional): el número de microsegundos que espera a que el pulso se complete: la función devuelve 0 si el pulso completo no se recibe dentro del tiempo de espera. Por defecto es de un segundo (unsigned long).
timeout, si se usa, es recomendable que sea, al menos, 1,3 veces sueperior a la duración del pulso a medir. Por ejemplo, si se mide un pulso de duración 0,01 segundo, timeout deber ser al menos 13000.
timeout, si se usa, es recomendable que sea, al menos, 1,3 veces sueperior a la duración del pulso a medir. Por ejemplo, si se mide un pulso de duración 0,01 segundo, timeout deber ser al menos 13000.
Retornos
La longitud del pulso (en microsegundos) o 0 si el pulso no se completa dentro del tiempo de espera (long sin signo)
Ejemplo
Este ejemplo muestra en el monitor serie la duración del impulso aplicado a la entrada 2 del Arduino.
A partir de la duración del impulso se calcula la frecuencia y el número de pulsos por segundo.
El pulso puede provenir de un generador de pulsos en general o también se puede generar con otra placa Arduino mediante un sketch que simule un tren de pulsos.
float Pulso;
float Tiempo = 0;
float Frecuencia = 0;
int NumeroPulsos = 0;
void setup ()
{
Serial.begin (9600);
}
void loop ()
{
Pulso = pulseIn (2, HIGH, 15000);
Tiempo = Pulso / 1000000;
if (Tiempo > 0.001)
{
Serial.print ("Duracion del pulso: ");
Serial.print (Tiempo);
Serial.println (" segundos");
Serial.println (" ");
}
Frecuencia = 1 / Tiempo;
Serial.print ("Frecuencia: ");
Serial.print (Frecuencia);
Serial.println (" Hz");
Serial.println (" ");
NumeroPulsos = Frecuencia * 60;
Serial.print ("Numero de pulsos/segundo: ");
Serial.println (NumeroPulsos);
Serial.println (" ");
Serial.println (" ");
delay (1000);
}
Hola, ¿Como puedo hacer para medir el tiempo de un boton pulsado? por ejemplo "Si pulso boton durante X segundos ejecuta esto.."
ResponderEliminarElimino el post anterior porque entiendo que quieres hacerlo con esta instrucción, pulseIn().
ResponderEliminarEjemplo:
float Pulso;
float Tiempo = 0;
void setup ()
{
Serial.begin (9600);
}
void loop ()
{
Pulso = pulseIn (2, HIGH, 100000000);
Tiempo = Pulso / 1000000;
if (Tiempo > 0.05)
{
Serial.print ("Duracion del pulso: ");
Serial.print (Tiempo);
Serial.println (" segundos");
}
}
Cada ves que el pin 2 pase a nivel HIGH, medirá el tiempo que se tarda en soltar el botón y escribirá este tiempo en el monitor serie.
A partir de esto se puede hacer una comparación y realizar otras acciones.
Hola Manuel Delgado y equipo. Gracias por su trabajo.
EliminarYa que me has dado una idea, tengo pensado un pequeño proyecto: Activar y desactivar una ALARMA con una puls. prolongada(5sec en mi caso)por el pin 2.
Una especie de DEBOUNCE (Blink ) Pulsacion de 5sec pin HIGH, pulsacion 5 sec pin LOW.
He llegado hasta la mitad, enciende bien, pero no se como apagarlo. Porfa si algien me puede echar un cable!!! Grcias
Aqui les dejo el ejemplo, igual es de ayuda para alguno con la misma duda...
Saludos
----------------------------------------------------------------------
/************ Activacion ALARMA por tiempo de pulsacion ***************/
const int ledPin = 13;
float Pulso;
float Tiempo = 0;
void setup ()
{
pinMode(ledPin, OUTPUT);
Serial.begin (9600);
}
void loop ()
{
Pulso = pulseIn (2, HIGH, 100000000);
Tiempo = Pulso / 1000000;
if (Tiempo > 5.00) // Tiempo en segundos transcurido con el pulsador apretado
{
Serial.print ("Duracion del pulso: ");
Serial.print (Tiempo);
Serial.println (" segundos");
digitalWrite(ledPin, HIGH); // Activar alarma
Serial.println (" << Alarma On! >> ");
}
}
Gracias amigo me sirvío de mucho, solo tengo una pregunta. si quisisera hacerlo mas preciso, a un nivel que reconosca un golpe rapido de una piedra como lo haria?
ResponderEliminarDebes especificar más datos. Con que fuerza actuaría la piedra, en que superficie impactaría, etc.
EliminarSi lo deseas, puedes pasarme los datos al email.
Debes especificar más datos. Con que fuerza actuaría la piedra, en que superficie impactaría, etc.
EliminarSi lo deseas, puedes pasarme los datos al email.
Ahi es mejor q uses interrupciones
Eliminardisculpa como puedo hacer para comparar el tiempo entre pulsos es decir quiero comparar si el tiempo en tre un pulso y otro es el mismo o ed diferente para que realice alguna funcion en cada caso
ResponderEliminarBuena noche, ando haciendo un diferenciador de las diferentes monedas con un sensor infrarrojo, como hago para obtener mas datos de tiempo, pues los tiempos son muy parecidos cada ves q interrumpe el pulso del sensor
ResponderEliminarHola tiene algún libro "fuente" de donde extrajo ese dato de que la función pulsein funciona con 10 microsegundos hasta 3 minutos; o el código con que obtuvo ese tiempo tan pequeño empíricamente.
ResponderEliminarVe a la pagina de referencia del arduino ahi lo encontraras todo eso si en ingles. Saludos
EliminarTalvez algún diagrama q m ayuden ... tngo que hacer un tacometro casero usando un encoder, sensor tipo herradura ...
ResponderEliminarBuenas , te hago una consulta, como hago para medir frecuencia a la red 220VAC/50Hz sin usar interrupciones.
ResponderEliminarPD: Estoy usando un optoacoplador cruce por cero (H11AA1)
Muchas gracias
Disculpen soy nuevo en arduinio, me gustaria hacer que si se presiona el botón, en un periodo de 2 segundos deberá realizar un ciclo de 4 estados:
ResponderEliminarEstado 1: Medio Segundo Prendido.
Estado 2: Medio Segundo Apagado.
Estado 3: Medio Segundo Prendido.
Estado 4: Medio Segundo Apagado.
Si el boton no esta presionado no debera suceder nada.
Si despues de 2 segundo el botón sigue presionado se repite el cambio de estados.
alguien me puede ayudar?
Hola, utilizando la info de MuRy_74
Eliminarpuedes agregar las sentencias if
y tendrás el programa andando
lo de los estados es lo mas facil
Hola, Buenas, quiero hacer un copiador, osea grabar una secuencia de pulsaciones de un botón (Cantidad y Tiempo entre pulsaciones) y luego reproducir lo grabado en una salida digital, seria con 2 modos! 1- modo copiador y 2-modo reproducción. lo podre hacer con pulsein?
ResponderEliminarHola todos, veo variedad de aplicaciones con la misma lógica del origen, y yo soy uno mas. Tengo un contador que suma las veces que se pulsa un botón, pero necesito que además de contar, regrese a su estado inicial = 0, pero no lo logro. Agradezco su ayuda, comparto mi código:
ResponderEliminarvoid loop() {
// read the pushbutton input pin:
EstadoInicial = digitalRead(buttonPin);
// compare the EstadoInicial to its previous state
if (EstadoInicial != nuevoEstadoInicial) {
// if the state has changed, increment the counter
if (EstadoInicial == 0) {
// if the current state is 0 then the button went from on to total:
Total++;
Serial.println("on");
Serial.print("Cantidad ingesada: ");
Serial.println(Total);
} else {
// if the current state is LOW then the button went from on to Total:
Serial.println("Total: ");
}
// Delay a little bit to avoid bouncing
delay(10);
}
Que cantidad de frecuencia. Máxima. Servirá la. Función pulse in(), soporto ra 20 khz
ResponderEliminarlo que deseo es como hacer que un pulso del teclado genere 10 pulsos
ResponderEliminarEn mi Arduino me marca error (me dices que no está declarado y cuando lo hago me dice error cuál es su funcion) como le agrego la función o hago para que no me marque error
ResponderEliminar