Hola!
¿Podrían ayudarme con mi código? Hay un error pero no logro verlo.
No hay forma de que me imprima una variable float. (caudalimetro) La pantalla/bliblioteca funciona, ya que el otro dato anterior (presión) si que lo imprime correctamente.
Tengo un sensor de presión y un caudalimetro. El valor de caudal, no hay forma, ni de que aparezca un simple texto. El programa nace de unir dos, uno que controlaba presión y otro que controla el caudalimetro. La parte del puerto serie, tampoco funciona correctament cuando junto los programas.
Disculpad si el error es muy simple, me estoy introduciendo y no domino de programación. Tengo el arduino uno. Adjunto mi código abajo:
Gracias! Un saludos
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>
#include <Wire.h>
LiquidCrystal_I2C lcd ( 0X27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //pins inters de la pantalla
// Parte del caudalimetre
volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor = 2; //Sensor conectado en el pin 2
float factor_conversion=6.6; //para convertir de frecuencia a caudal
float volumen=0;
long dt=0; //variación de tiempo por cada bucle
long t0=0; //millis() del bucle anterior
//---Función que se ejecuta en interrupción---------------
void ContarPulsos ()
{
NumPulsos++; //incrementamos la variable de pulsos
}
//---Función para obtener frecuencia de los pulsos--------
int ObtenerFrecuecia()
{
int frecuencia;
NumPulsos = 0; //Ponemos a 0 el número de pulsos
interrupts(); //Habilitamos las interrupciones
delay(1000); //muestra de 1 segundo
noInterrupts(); //Deshabilitamos las interrupciones
frecuencia=NumPulsos; //Hz(pulsos por segundo)
return frecuencia;
}
void setup() {
Serial.begin(9600);
lcd.begin (20,4); // Iniciem el display, 20 caracters 4 columnes
// caudalimetro
pinMode(PinSensor, INPUT);
attachInterrupt(0,ContarPulsos,RISING);//(Interrupción 0(Pin2),función,Flanco de subida)
Serial.println ("Envie 'r' para restablecer el volumen a 0 Litros");
t0=millis();
}
void loop () {
// Pressión
int lectura = analogRead(A3);
int PRESSIO =map(lectura, 103, 920, 0, 50);
lcd.setCursor(0,1); // Posiciona la primera letra al segmento 0 i linia 1
lcd.print("PRESSIO REAL ");
lcd.print(PRESSIO);
lcd.print(" Bar");
delay (200);
// Caudalimetro
if (Serial.available()) {
if(Serial.read()=='r')volumen=0;//restablecemos el volumen si recibimos 'r'
}
float frecuencia=ObtenerFrecuecia(); //obtenemos la frecuencia de los pulsos en Hz
float caudal_L_m=frecuencia/factor_conversion; //calculamos el caudal en L/m
dt=millis()-t0; //calculamos la variación de tiempo
t0=millis();
volumen=volumen+(caudal_L_m/60)*(dt/1000); // volumen(L)=caudal(L/s)*tiempo(s)
//-----Enviamos por el puerto serie---------------
Serial.print ("Caudal: ");
Serial.print (caudal_L_m,3);
Serial.print ("L/min\tVolumen: ");
Serial.print (volumen,3);
Serial.println (" L");
lcd.setCursor(0,3); // Posiciona la primera lletra al segment 0 i linia 3
lcd.print("CAUDAL ");
lcd.print(caudal_L_m);
lcd.print("L/min");
}