Greetings, I am looking for a way to close the water flow when the flow sensor recognizes the number of liters that I require in this case, it is 1 liter and 5 liters, which the idea is to write on the serial monitor 1 or 5 and just let it go a liter or 5, when finished, return the liter count to 0.0, the step cut is activating or deactivating the passage of an electro valve on pin 8, but the only problem I have is that the second time I send again the number of liters these are counted on their own although the flowmeter is not active, someone can help me greetings I am a beginner and I use arduino mega.
#include <Wire.h>
volatile int pulsos1 = 0;
volatile int pulsos2 = 0;
volatile int pulsos3 = 0;
volatile int pulsos4 = 0;
volatile int pulsos5 = 0;
float litros_seg1;
float litros_seg2;
float litros_seg3;
float litros_seg4;
float litros_seg5;
float litros1;
float litros2;
float litros3;
float litros4;
float litros5;
int pinRele1=8;
int pinRele2=9;
int pinRele3=10;
int pinRele4=11;
int pinRele5=12;
int hallsensor1 = 2;
int hallsensor2 = 3;
int hallsensor3 = 18;
int hallsensor4 = 19;
int hallsensor5 = 20;
unsigned long pulsos_Acumulados1 = 0;
unsigned long pulsos_Acumulados2 = 0;
unsigned long pulsos_Acumulados3 = 0;
unsigned long pulsos_Acumulados4 = 0;
unsigned long pulsos_Acumulados5 = 0;
String cadenaCharEntrada = "";
bool finCadena = false;
byte prevPos;
String first;
int caudalTope1;
int caudalTope2;
int caudalTope3;
int caudalTope4;
int caudalTope5;
void rpm1 () {
pulsos1++;
}
void rpm2 () {
pulsos2++;
}
void rpm3 () {
pulsos3++;
}
void rpm4 () {
pulsos4++;
}
void rpm5 () {
pulsos5++;
}
void setup() {
Serial.begin(9600);
pinMode(pinRele1,OUTPUT);
pinMode(pinRele2,OUTPUT);
pinMode(pinRele3,OUTPUT);
pinMode(pinRele4,OUTPUT);
pinMode(pinRele5,OUTPUT);
digitalWrite(pinRele1,HIGH);
digitalWrite(pinRele2,HIGH);
digitalWrite(pinRele3,HIGH);
digitalWrite(pinRele4,HIGH);
digitalWrite(pinRele5,HIGH);
interrupts();
attachInterrupt(digitalPinToInterrupt(hallsensor1), rpm1, RISING);
attachInterrupt(digitalPinToInterrupt(hallsensor2), rpm2, RISING);
attachInterrupt(digitalPinToInterrupt(hallsensor3), rpm3, RISING);
attachInterrupt(digitalPinToInterrupt(hallsensor4), rpm4, RISING);
attachInterrupt(digitalPinToInterrupt(hallsensor5), rpm5, RISING);
}
void loop () {
if(finCadena){
finCadena = false;
if(cadenaCharEntrada.indexOf("a") > 0){
prevPos = cadenaCharEntrada.indexOf("a");
first = cadenaCharEntrada.substring(0, prevPos);
caudalTope1 = (String(first).toInt())*1000;
caudal1(caudalTope1);
} else if (cadenaCharEntrada.indexOf("b") > 0){
prevPos = cadenaCharEntrada.indexOf("b");
first = cadenaCharEntrada.substring(0, prevPos);
caudalTope2 = (String(first).toInt())*1000;
caudal2(caudalTope2);
} else if (cadenaCharEntrada.indexOf("c") > 0){
prevPos = cadenaCharEntrada.indexOf("c");
first = cadenaCharEntrada.substring(0, prevPos);
caudalTope3 = (String(first).toInt())*1000;
caudal3(caudalTope3);
} else if (cadenaCharEntrada.indexOf("d") > 0){
prevPos = cadenaCharEntrada.indexOf("d");
first = cadenaCharEntrada.substring(0, prevPos);
caudalTope4 = (String(first).toInt())*1000;
caudal4(caudalTope4);
} else if (cadenaCharEntrada.indexOf("e") > 0){
prevPos = cadenaCharEntrada.indexOf("e");
first = cadenaCharEntrada.substring(0, prevPos);
caudalTope5 = (String(first).toInt())*1000;
caudal5(caudalTope5);
}
cadenaCharEntrada = "";
}
}
void serialEvent(){
//Recepción de datos Seriales
if (Serial.available()) {
char CaracterEntrada = Serial.read();
cadenaCharEntrada += CaracterEntrada;
if (CaracterEntrada == '\n') {
finCadena = true;
}
}
}
void caudal1(int caudal){
while (litros1 < caudal){
pulsos_Acumulados1 += pulsos1;
litros_seg1 = litros_seg1 + ((pulsos1/7.5)/60);
litros1 = pulsos_Acumulados1*1000/450.0;
digitalWrite(pinRele1,LOW);
Serial.print(litros_seg1);
Serial.println("A");
}
digitalWrite(pinRele1,HIGH);
litros_seg1 = 0;
litros1 = 0;
pulsos_Acumulados1 = 0;
pulsos1 = 0;
}
void caudal2(int caudal){
while (litros2 < caudal){
pulsos_Acumulados2 += pulsos2;
litros_seg2 = litros_seg2 + ((pulsos2 / 7.5) / 60);
litros2 = pulsos_Acumulados2*1000/450.0;
digitalWrite(pinRele2,LOW);
Serial.print(litros_seg2);
Serial.println("B");
}
digitalWrite(pinRele2,HIGH);
litros2 = 0;
litros_seg2 = 0.0;
pulsos_Acumulados2 = 0;
pulsos2 = 0;
}
void caudal3(int caudal){
while (litros3 < caudal){
pulsos_Acumulados3 += pulsos3;
litros_seg3 = litros_seg3 + ((pulsos3 / 7.5) / 60);
litros3 = pulsos_Acumulados3*1000/450.0;
digitalWrite(pinRele3,LOW);
Serial.print(litros_seg3);
Serial.println("C");
}
digitalWrite(pinRele3,HIGH);
litros3 = 0;
litros_seg3 = 0.0;
pulsos_Acumulados3 = 0;
pulsos3 = 0;
}
void caudal4(int caudal){
while (litros4 < caudal){
pulsos_Acumulados4 += pulsos4;
litros_seg4 = litros_seg4 + ((pulsos4 / 7.5) / 60);
litros4 = pulsos_Acumulados4*1000/450.0;
digitalWrite(pinRele4,LOW);
Serial.print(litros_seg4);
Serial.println("D");
}
digitalWrite(pinRele4,HIGH);
litros4 = 0;
litros_seg4 = 0.0;
pulsos_Acumulados4 = 0;
pulsos4 = 0;
}
void caudal5(int caudal){
while (litros5 < caudal){
pulsos_Acumulados5 += pulsos5;
litros_seg5 = litros_seg5 + ((pulsos5 / 7.5) / 60);
litros5 = pulsos_Acumulados5*1000/450.0;
digitalWrite(pinRele5,LOW);
Serial.print(litros_seg5);
Serial.println("E");
}
digitalWrite(pinRele5,HIGH);
litros5 = 0;
litros_seg5 = 0.0;
pulsos_Acumulados5 = 0;
pulsos5 = 0;
}