Hola, estoy intentando leer unos caudalimetros para que me indiquen un estado alto si hay caudal y un estado bajo si esta parado. Mi sorpresa es que con solo conectar el caudalimetro estando parado, obtengo 50 pulsos. Me pasa en todas las entradas, incluso conectando un cable suelto a algun pin, me cuenta 50 pulsos.
este es mi codigo:
// Pines de los caudalímetros en el Portenta H7
#define SensorCaudal1 PC_6 // Caudalímetro 1
#define SensorCaudal2 PJ_11 // Caudalímetro 2
#define SensorCaudal3 PG_7 // Caudalímetro 3
#define SensorCaudal4 PK_1 // Caudalímetro 4 PWM5
// Variables para contar pulsos de cada caudalímetro
volatile unsigned int pulsos1 = 0;
volatile unsigned int pulsos2 = 0;
volatile unsigned int pulsos3 = 0;
volatile unsigned int pulsos4 = 0;
// Variables para almacenar el estado de cada caudalímetro (1 = hay flujo, 0 = no hay flujo)
int estadoCaudal1 = 0;
int estadoCaudal2 = 0;
int estadoCaudal3 = 0;
int estadoCaudal4 = 0;
unsigned long tiempoLectura = 1000; // Tiempo en milisegundos para verificar el flujo
void setup() {
// Configuramos los pines de los caudalímetros como entradas
pinMode(SensorCaudal1, INPUT_PULLUP);
pinMode(SensorCaudal2, INPUT_PULLUP);
pinMode(SensorCaudal3, INPUT_PULLUP);
pinMode(SensorCaudal4, INPUT_PULLUP);
// Configuramos las interrupciones para cada caudalímetro
attachInterrupt(digitalPinToInterrupt(SensorCaudal1), contarPulsos1, FALLING);
attachInterrupt(digitalPinToInterrupt(SensorCaudal2), contarPulsos2, FALLING);
attachInterrupt(digitalPinToInterrupt(SensorCaudal3), contarPulsos3, FALLING);
attachInterrupt(digitalPinToInterrupt(SensorCaudal4), contarPulsos4, FALLING);
// Iniciamos la comunicación serie para ver los datos en el monitor serie
Serial.begin(115200);
}
void loop() {
// Llamamos a la función que realiza la lectura de los caudalímetros
LecturaCaudalimetros();
// Esperamos unos segundos antes de realizar la siguiente lectura
delay(2000); // Puedes ajustar el tiempo de espera
}
// Función que lee los caudalímetros
void LecturaCaudalimetros() {
unsigned long tiempoInicioLectura = millis();
// Reiniciamos los contadores de pulsos antes de empezar la medición
pulsos1 = 0;
pulsos2 = 0;
pulsos3 = 0;
pulsos4 = 0;
// Realizamos la medición durante el tiempo especificado
while (millis() - tiempoInicioLectura < tiempoLectura) {
// Continuamos contando pulsos
}
// Verificamos el estado de cada caudalímetro después del tiempo de medición
estadoCaudal1 = (pulsos1 > 0) ? 1 : 0;
estadoCaudal2 = (pulsos2 > 0) ? 1 : 0;
estadoCaudal3 = (pulsos3 > 0) ? 1 : 0;
estadoCaudal4 = (pulsos4 > 0) ? 1 : 0;
// Mostrar los estados de los caudalímetros en la consola
Serial.print("Estado Caudalímetro 1: ");
Serial.println(estadoCaudal1);
Serial.print("Pulsos Caudalímetro 1: ");
Serial.println(pulsos1);
Serial.print("Estado Caudalímetro 2: ");
Serial.println(estadoCaudal2);
Serial.print("Pulsos Caudalímetro 2: ");
Serial.println(pulsos2);
Serial.print("Estado Caudalímetro 3: ");
Serial.println(estadoCaudal3);
Serial.print("Pulsos Caudalímetro 3: ");
Serial.println(pulsos3);
Serial.print("Estado Caudalímetro 4: ");
Serial.println(estadoCaudal4);
Serial.print("Pulsos Caudalímetro 4: ");
Serial.println(pulsos4);
}
// Funciones de interrupción para contar los pulsos de cada caudalímetro
void contarPulsos1() {
pulsos1++;
}
void contarPulsos2() {
pulsos2++;
}
void contarPulsos3() {
pulsos3++;
}
void contarPulsos4() {
pulsos4++;
}