Introducción
This post, it will be shown how to ensure the reading of a digital input using our library Filter. This library has been developed by Industrial Shields.
Requisitos
Ethernet o 20 I/Os PLC: Ethernet PLC 20 I/Os PLC
Placas de Industrial Shields: Placas de Industrial Shields:
Filter IS library: Filter Github library
Descripción
En primer lugar, es importante conocer el propósito de nuestro filtro digital. Básicamente, filtra los rebotes cuando una entrada digital cambia de HIGH a LOW o viceversa. Cuando el estado del pin está cambiando, durante este cambio de HIGH a LOW por ejemplo la señal hace unos debounces, por lo que se puede leer un valor erróneo que puede provocar errores ya que se está leyendo un dato que no es correcto. La implementación de esta Librería se basa en un simple temporizador que ignora todas las señales dentro de un periodo de tiempo una vez que ha leído una entrada diferente a la anterior. Si ponemos un periodo de tiempo de 200ms y leemos un estado LOW, habiendo antes un estado HIGH, el filtro ignora durante 200ms la señal de entrada, después de estos 200ms vuelve a leer y si sigue siendo un estado LOW, el estado de la entrada se cambia a LOW. Es exactamente la misma idea para cuando se cambia de LOW a HIGH.
Ejemplo
Por último, se mostrará un ejemplo que filtra la entrada digital I0.8 (Uso de un filtro digital):
#include <Filter.h> // Create a filter // Filtering time: 200ms DigitalFilter<500> filter;
void setup(){ // Init Serial port Serial.begin(9600L); } void loop(){ // Read pin value int value = digitalRead(I0_8); // Filter it int filtered = filter.update(value); // Print the filtered value Serial.println(filtered); }
Este otro ejemplo de la Librería Filter.h muestra cómo filtrar una señal de entrada analógica ( I0_10 en este ejemplo). Como puede ver, debe definir el número de filtros y también el periodo de muestreo (en ms):
#include <Filter.h> // Create a filter // Number of samples: 10 // Sample period: 5ms (setting it to 0, samples are taken as fast as possible) AnalogFilter<10, 5> filter; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // Init Serial port Serial.begin(9600L); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // Read pin value int value = analogRead(I0_10); // Filter it int filtered = filter.update(value); // Print the filtered value Serial.println(filtered); }
Cómo asegurar la lectura de una Librería de entrada digital/analógica herramientas 40 filtro digital