Hola compañeros del foro,
Soy nuevo en el mundillo de la programación en Arduino y tengo un proyecto en el cual tengo que pedir un número o porcentaje de llenado del nivel de agua, cuando la persona envíe este porcentaje o número, se debe activar la electroválvula para dejar pasar el agua. Si el porcentaje sobre pasa cierto nivel la bomba debe activarse para expulsar el agua.
Aún no he dado con el truco ya que no consigo que la electroválvula me deje pasar el porcentaje especificado, tengo este código pero sé que algo falla.
const int Trigger = 2; //Pin digital 2 para el Trigger del sensor
const int Echo = 3; //Pin digital 3 para el Echo del sensor
const int valvula = 8; //Valvula
const int Bomba = 9; //Electro Bomba
int cm = 0;
#define DEBUG(a) Serial.println(a);
void setup() {
Serial.begin(9600);//iniciailzamos la comunicación
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
Serial.setTimeout(50);
Serial.println("Introduzca la cantidad que desea llenar: ");
pinMode(valvula, OUTPUT); //definir pin como salida Valvula
pinMode(Bomba, OUTPUT); //definir pin como salida Bomba agua
}
void loop()
{
long t; //timepo que demora en llegar el eco
long d; //distancia en centimetros
long distancia;
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
d = t/59; //escalamos el tiempo a una distancia en cm
distancia = d+4; //reajuste de error
cm = distancia;
Serial.print("Distancia: ");
Serial.print(distancia); //Enviamos serialmente el valor de la distancia
Serial.print("cm");
Serial.println();
delay(1000); //Hacemos una pausa
if (Serial.available())
{
int data = Serial.parseInt();
DEBUG((int)data);
delay(100);
if (data <= 0 && data > 17){
Serial.println("Valor no válido. Introduzca entre un rango de 1 a 16.");
digitalWrite(valvula, LOW);
delay(1000);
digitalWrite(Bomba, LOW);
delay(1000);
}else{
cm = data;
digitalWrite(valvula, HIGH); // poner el Pin en HIGH
delay(2000); // esperar dos segundo
digitalWrite(valvula, LOW); // poner el Pin en LOW
delay(2000); // esperar 2 segundo
}
if (cm > 7){
digitalWrite(Bomba, HIGH);
delay(10000);
digitalWrite(Bomba, LOW);
delay(1000);
}
delay(1000); // Wait for 1 second(s)
}
}
La verdad me he atascado pues no funciona como querría, osea aplicando la cantidad especificada.
muchas gracias de antemano por la ayuda