Duda con proyecto de llenado y vaciado de tanque de agua con sensor ultrasónico

Hola a todos,

este es mi primer post en el foro, y por favor no sean duros ya que apenas voy metiéndome al mundo de Arduino.

Tengo un problema con mi proyecto, el cual consiste en un sistema de purificación de agua donde tenemos dos tanques, uno donde se acumula el agua contaminada y el segundo donde se almacena el agua limpia.

Apenas voy comenzando con la programación y ya me ha surgido un problema, tengo un Ultrasónico HC-SR04 sensando mi primer tanque, lo he programado para que, cuando el nivel del agua del tanque disminuya al 30% se abra la válvula principal, y llene el tanque de nuevo, aun que (por este momento) mi válvula principal es un led :sweat_smile:. El problema es que cuando tiene de 0 a 30% se prende el LED (válvula), pero al pasar el 30% se vuelve a desactivar. Y lo que yo quiero es que se active hasta que llegue al 100% de nuevo, y al vaciarse y llegar al 30% se vuelva a activar hasta de nuevo llenarse.

Estoy utilizando un IF para hacer esto, pero quizá ustedes saben una forma de lograr que esto suceda.

Pego una parte del código:

int const percent_pin = 8;

/Crear el objeto de la clase NewPing/
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {

pinMode(8,OUTPUT);
Serial.begin(9600);

}

void loop() {
// Esperar 1 segundo entre mediciones
delay(1000);
// Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
int uS = sonar.ping_median();
//Declarar variable dis
int dis = uS / US_ROUNDTRIP_CM;
//declarar variable h
int h = 28 - dis;
//declarar variable vol
float vol = h * 1.63461538;
//declarar variable percent
int percent = (vol * 100) / (42.5);
// Imprimir porcentaje de llenado de tanque
Serial.print("Tanque al “);
Serial.print(percent);
Serial.print(” % ");
// Imprimir el volumen medido a la consola serial
Serial.print(“Volumen: “);
// Calcular el volumen con base en una variable
Serial.print(vol);
Serial.println(” Litros”);

if (percent <= 30)
{
digitalWrite(percent_pin,LOW);
}
else if (percent < 0)
{
digitalWrite(percent_pin,HIGH);
}
else
{
digitalWrite(percent_pin,HIGH);
}
}

prueba esto:

if (percent <= 30)
{
digitalWrite(percent_pin,LOW);
}
else if (percent >= 99)
{
digitalWrite(percent_pin,HIGH);
}